★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ALTER FUNCTION

ALTER FUNCTION — 関数定義を変更する

概要

ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    action [ ... ] [ RESTRICT ]
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    RENAME TO new_name
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    SET SCHEMA new_schema
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    [ NO ] DEPENDS ON EXTENSION extension_name


ここで、actionは以下のいずれかです。

    CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    IMMUTABLE | STABLE | VOLATILE
    [ NOT ] LEAKPROOF
    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    PARALLEL { UNSAFE | RESTRICTED | SAFE }
    COST execution_cost
    ROWS result_rows
    SUPPORT support_function
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

説明

ALTER FUNCTIONは関数定義を変更します。

ALTER FUNCTIONを使用するには関数の所有者でなければなりません。 関数のスキーマを変更するには、新しいスキーマにおけるCREATE権限も必要です。 所有者を変更するには、直接または間接的に新しいロールのメンバでなければなりません。 また、そのロールは関数のスキーマにおいてCREATE権限を持たなければなりません。 (この制限により、関数の削除と再作成で行うことができない処理を所有者の変更で行えないようになります。 しかし、スーパーユーザはすべての関数の所有者を変更することができます。)

パラメータ

name

既存の関数名です(スキーマ修飾名も可)。 引数リストを指定しない場合、名前はスキーマ内で一意でなければなりません。

argmode

引数のモードで、INOUTINOUTVARIADICのいずれかです。 省略された場合のデフォルトはINです。 関数の識別を行うには入力引数のみが必要ですので、実際にはALTER FUNCTIONOUT引数を無視することに注意してください。 ですので、ININOUTおよびVARIADIC引数を列挙することで十分です。

argname

引数の名前です。 関数の識別を行うには引数のデータ型のみが必要ですので、実際にはALTER FUNCTIONは引数の名前を無視することに注意してください。

argtype

もしあれば、その関数の引数のデータ型(スキーマ修飾可能)です。

new_name

新しい関数名です。

new_owner

新しい関数の所有者です。 関数にSECURITY DEFINERが指定されている場合、その後は新しい所有者の権限で関数が実行されることに注意してください。

new_schema

関数の新しいスキーマです。

DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name

この構文は、関数が拡張に依存している、もしくはNOが指定された場合には拡張にもはや依存していないと印を付けます。 拡張に依存していると印を付けられた関数は、CASCADEが指定されていなくても拡張が削除されると自動的に削除されます。 関数は複数の拡張に依存することができ、これらの拡張のうちどれか一つが削除されるとその関数は削除されます。

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUTは、引数の一部またはすべてがNULLの場合に関数が呼び出されるように変更します。 RETURNS NULL ON NULL INPUTもしくはSTRICTは、引数の一部がNULLの場合に関数が呼び出されないように変更します。 代わりに自動的にNULLという結果とされます。 詳細はCREATE FUNCTIONを参照してください。

IMMUTABLE
STABLE
VOLATILE

関数の揮発性を指定した設定に変更します。 詳細についてはCREATE FUNCTIONを参照してください。

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

関数のセキュリティを定義者にするか否かを変更します。 EXTERNALキーワードはSQLとの互換性のためのものであり、無視されます。 この機能の詳細についてはCREATE FUNCTIONを参照してください。

PARALLEL

関数が並列処理に対して安全であると見なされるかどうかを変更します。 詳しくはCREATE FUNCTIONを参照してください。

LEAKPROOF

関数を漏洩防止関数とみなすか否かを変更します。 この機能に関する詳細についてはCREATE FUNCTIONを参照してください。

COST execution_cost

関数の推定実行コストを変更します。 詳細についてはCREATE FUNCTIONを参照してください。

ROWS result_rows

集合を返す関数で返される推定行数を変更します。 詳細についてはCREATE FUNCTIONを参照してください。

SUPPORT support_function

この関数のために使うプランナサポート関数を設定もしくは変更します。 詳細は38.11を参照してください。 このオプションを使うにはスーパーユーザでなければなりません。

新しいサポート関数の名前でなければならないため、このオプションはサポート関数を同時に削除するのに使うことはできません。 そうする必要があるなら、CREATE OR REPLACE FUNCTIONを使ってください。

configuration_parameter
value

関数呼び出し時に設定パラメータに対して行われる設定を追加または変更します。 valueDEFAULT、またはそれと等価なRESETが使用された場合、関数の局所的な設定は削除されます。 このため、関数はその環境内に存在する値で実行されます。 すべての関数の局所的な設定を消去したければRESET ALLを使用してください。 SET FROM CURRENTは、ALTER FUNCTIONが実行された時点でのパラメータの現在値を、関数起動時に適用される値として保管します。

設定可能なパラメータとその値に関する詳細については、SETおよび第20章を参照してください。

RESTRICT

標準SQLとの互換性のためのものであり、無視されます。

integer型用のsqrt関数の名前をsquare_rootに変更します。

ALTER FUNCTION sqrt(integer) RENAME TO square_root;

integer型用のsqrt関数の所有者をjoeに変更します。

ALTER FUNCTION sqrt(integer) OWNER TO joe;

integer型用のsqrt関数のスキーマをmathsに変更します。

ALTER FUNCTION sqrt(integer) SET SCHEMA maths;

integer型に対する関数sqrtが、拡張mathlibに依存するとして印をつけるには、次のようにします。

ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;

関数用に検索パスを自動的に設定するように調整します。

ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;

関数用のsearch_pathの自動設定を無効にします。

ALTER FUNCTION check_password(text) RESET search_path;

呼び出し元で使用される検索パスでこの関数が実行されるようになります。

互換性

この文は標準SQLのALTER FUNCTION文に部分的に従っています。 標準ではより多くの関数の属性を変更できますが、関数名の変更、関数を定義者の権限で実行するかどうかの変更、関数と設定パラメータ値の関連付け、関数の所有者やスキーマ、揮発性の変更を行う機能はありません。 また、標準ではRESTRICTキーワードを必須としていますが、PostgreSQLでは省略可能です。

関連項目

CREATE FUNCTION, DROP FUNCTION, ALTER PROCEDURE, ALTER ROUTINE