ALTER PROCEDURE — プロシージャの定義を変更する
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ]action
[ ... ] [ RESTRICT ] ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] RENAME TOnew_name
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] SET SCHEMAnew_schema
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSIONextension_name
ここでaction
は以下のいずれかです。 [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } SETconfiguration_parameter
FROM CURRENT RESETconfiguration_parameter
RESET ALL
ALTER PROCEDURE
はプロシージャ定義を変更します。
ALTER PROCEDURE
を使用するにはプロシージャの所有者でなければなりません。
プロシージャのスキーマを変更するには、新しいスキーマにおけるCREATE
権限も必要です。
所有者を変更するには、新しい所有者ロールに対してSET ROLE
ができなければなりません。また、そのロールはプロシージャのスキーマにおいてCREATE
権限を持たなければなりません。
(この制限により、プロシージャの削除と再作成で行うことができない処理を所有者の変更で行えないようになります。
しかし、スーパーユーザはすべての関数の所有者を変更することができます。)
name
既存のプロシージャ名です(スキーマ修飾も可)。 引数リストを指定しない場合、名前はスキーマ内で一意でなければなりません。
argmode
引数モードで、IN
かOUT
かINOUT
かVARIADIC
のいずれかです。
省略した場合のデフォルトはIN
です。
argname
引数の名前です。
プロシージャの識別を行うには引数のデータ型のみが使われますので、実際にはALTER PROCEDURE
は引数の名前を無視することに注意してください。
argtype
もしあれば、そのプロシージャの引数のデータ型(スキーマ修飾も可)です。 引数のデータ型を使用したプロシージャ検索方法の詳細については、DROP PROCEDUREを参照してください。
new_name
新たなプロシージャ名。
new_owner
新しいプロシージャの所有者です。
プロシージャにSECURITY DEFINER
が指定されている場合、その後は新しい所有者の権限でプロシージャが実行されることに注意してください。
new_schema
プロシージャの新しいスキーマ。
extension_name
この形式は、プロシージャが拡張機能に依存するか、NO
が指定されている場合は拡張機能に依存しないことを示します。
カスケードが指定されていない場合でも、拡張機能が削除されると、拡張機能に依存しているとマークされているプロシージャは削除されます。
プロシージャは複数の拡張機能に依存することができ、これらの拡張機能のいずれかが削除されると削除されます。
[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER
プロシージャを定義者セキュリティにするか否かを変更します。
EXTERNAL
キーワードはSQLとの互換性のためのものであり、無視されます。
この機能の詳細についてはCREATE PROCEDUREを参照してください。
configuration_parameter
value
プロシージャ呼び出し時に設定パラメータに対して行われる設定を追加または変更します。
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では省略可能です。