ALTER FUNCTION — 関数定義を変更する
ALTER FUNCTIONname[ ( [ [argmode] [argname]argtype[, ...] ] ) ]action[ ... ] [ RESTRICT ] ALTER FUNCTIONname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] RENAME TOnew_nameALTER FUNCTIONname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] OWNER TO {new_owner| CURRENT_USER | SESSION_USER } ALTER FUNCTIONname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] SET SCHEMAnew_schemaALTER 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_costROWSresult_rowsSUPPORTsupport_functionSETconfiguration_parameter{ TO | = } {value| DEFAULT } SETconfiguration_parameterFROM CURRENT RESETconfiguration_parameterRESET 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_nameNO DEPENDS ON EXTENSION extension_name
この構文は、関数が拡張に依存している、もしくはNOが指定された場合には拡張にもはや依存していないと印を付けます。
拡張に依存していると印をつけられた関数は、拡張が削除されると自動的に削除されます。
CALLED ON NULL INPUTRETURNS NULL ON NULL INPUTSTRICTCALLED ON NULL INPUTは、引数の一部またはすべてがNULLの場合に関数が呼び出されるように変更します。
RETURNS NULL ON NULL INPUTもしくはSTRICTは、引数の一部がNULLの場合に関数が呼び出されないように変更します。
代わりに自動的にNULLという結果とされます。
詳細はCREATE FUNCTIONを参照してください。
IMMUTABLESTABLEVOLATILE関数の揮発性を指定した設定に変更します。 詳細については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この関数のために使うプランナサポート関数を設定もしくは変更します。 詳細は37.11を参照してください。 このオプションを使うにはスーパーユーザでなければなりません。
新しいサポート関数の名前でなければならないため、このオプションはサポート関数を同時に削除するのに使うことはできません。
そうする必要があるなら、CREATE OR REPLACE FUNCTIONを使ってください。
configuration_parametervalue
関数呼び出し時に設定パラメータに対して行われる設定を追加または変更します。
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では省略可能です。