ALTER PROCEDURE — プロシージャの定義を変更する
ALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ]action[ ... ] [ RESTRICT ] ALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] RENAME TOnew_nameALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] OWNER TO {new_owner| CURRENT_USER | SESSION_USER } ALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] SET SCHEMAnew_schemaALTER PROCEDUREname[ ( [ [argmode] [argname]argtype[, ...] ] ) ] DEPENDS ON EXTENSIONextension_nameここでactionは以下のいずれかです。 [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER SETconfiguration_parameter{ TO | = } {value| DEFAULT } SETconfiguration_parameterFROM CURRENT RESETconfiguration_parameterRESET ALL
ALTER PROCEDUREはプロシージャ定義を変更します。
ALTER PROCEDUREを使用するにはプロシージャの所有者でなければなりません。
プロシージャのスキーマを変更するには、新しいスキーマにおけるCREATE権限も必要です。
所有者を変更するには、直接または間接的に新しいロールのメンバでなければなりません。
また、そのロールはプロシージャのスキーマにおいてCREATE権限を持たなければなりません。
(この制限により、プロシージャの削除と再作成で行うことができない処理を所有者の変更で行えないようになります。
しかし、スーパーユーザはすべての関数の所有者を変更することができます。)
name既存のプロシージャ名です(スキーマ修飾も可)。 引数リストを指定しない場合、名前はスキーマ内で一意でなければなりません。
argmode
引数モードで、INかVARIADICのいずれかです。
省略した場合のデフォルトはINです。
argname
引数の名前です。
プロシージャの識別を行うには引数のデータ型のみが必要ですので、実際にはALTER PROCEDUREは引数の名前を無視することに注意してください。
argtypeもしあれば、そのプロシージャの引数のデータ型(スキーマ修飾も可)です。
new_name新たなプロシージャ名。
new_owner
新しいプロシージャの所有者です。
プロシージャにSECURITY DEFINERが指定されている場合、その後は新しい所有者の権限でプロシージャが実行されることに注意してください。
new_schemaプロシージャの新しいスキーマ。
extension_nameプロシージャが依存することになる拡張の名前。
[ EXTERNAL ] SECURITY INVOKER[ EXTERNAL ] SECURITY DEFINER
プロシージャを定義者セキュリティにするか否かを変更します。
EXTERNALキーワードはSQLとの互換性のためのものであり、無視されます。
この機能の詳細についてはCREATE FUNCTIONを参照してください。
configuration_parametervalue
プロシージャ呼び出し時に設定パラメータに対して行われる設定を追加または変更します。
valueがDEFAULT、またはそれと等価なRESETが使用された場合、プロシージャの局所的な設定は削除されます。
このため、プロシージャはその環境内に存在する値で実行されます。
すべてのプロシージャの局所的な設定を消去したければRESET ALLを使用してください。
SET FROM CURRENTは、ALTER PROCEDUREが実行された時点でのパラメータの現在値を、プロシージャ起動時に適用される値として保管します。
RESTRICT標準SQLに準拠するためのものであり、無視されます。
integer型の二つの引数を持つプロシージャinsert_dataをinsert_recordに名前変更します。
ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;
integer型の二つの引数を持つプロシージャinsert_dataの所有者をjoeに変更します。
ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;
integer型の二つの引数を持つプロシージャinsert_dataのスキーマをaccountingに変更します。
ALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;
プロシージャinsert_data(integer, integer)を拡張myextに依存するものと印付けします。
ALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;
プロシージャに対して自動的に設定されるようにサーチパスを調整します。
ALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;
プロシージャに対するsearch_pathの自動的な設定を無効化します。
ALTER PROCEDURE check_password(text) RESET search_path;
このプロシージャは何であれ呼び出し側で使われるサーチパスで実行されるようになります。
この文はSQL標準のALTER PROCEDUREと部分的に互換性があります。
標準ではより多くのプロシージャの属性を変更できますが、プロシージャの名前変更、定義者の権限で実行するかどうかの変更、設定パラメータ値の付与、および、プロシージャの所有者、スキーマ、変動性の変更は提供されません。
また、標準ではRESTRICTキーワードが必要ですが、PostgreSQLでは省略可能です。