ALTER FUNCTION — 関数定義を変更する
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ]action
[ ... ] [ RESTRICT ] ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] RENAME TOnew_name
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] SET SCHEMAnew_schema
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSIONextension_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 } COSTexecution_cost
ROWSresult_rows
SUPPORTsupport_function
SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } SETconfiguration_parameter
FROM CURRENT RESETconfiguration_parameter
RESET ALL
ALTER FUNCTION
は関数定義を変更します。
ALTER FUNCTION
を使用するには関数の所有者でなければなりません。
関数のスキーマを変更するには、新しいスキーマにおけるCREATE
権限も必要です。
所有者を変更するには、直接または間接的に新しいロールのメンバでなければなりません。
また、そのロールは関数のスキーマにおいてCREATE
権限を持たなければなりません。
(この制限により、関数の削除と再作成で行うことができない処理を所有者の変更で行えないようになります。
しかし、スーパーユーザはすべての関数の所有者を変更することができます。)
name
既存の関数名です(スキーマ修飾名も可)。 引数リストを指定しない場合、名前はスキーマ内で一意でなければなりません。
argmode
引数のモードで、IN
、OUT
、INOUT
、VARIADIC
のいずれかです。
省略された場合のデフォルトはIN
です。
関数の識別を行うには入力引数のみが必要ですので、実際にはALTER FUNCTION
がOUT
引数を無視することに注意してください。
ですので、IN
、INOUT
および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
関数呼び出し時に設定パラメータに対して行われる設定を追加または変更します。
value
がDEFAULT
、またはそれと等価なRESET
が使用された場合、関数の局所的な設定は削除されます。
このため、関数はその環境内に存在する値で実行されます。
すべての関数の局所的な設定を消去したければRESET ALL
を使用してください。
SET FROM CURRENT
は、ALTER FUNCTION
が実行された時点でのパラメータの現在値を、関数起動時に適用される値として保管します。
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では省略可能です。