[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 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 PROCEDURE

ALTER PROCEDURE — プロシージャの定義を変更する

概要

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


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

    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

説明

ALTER PROCEDUREはプロシージャ定義を変更します。

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

パラメータ

name

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

argmode

引数モードで、INVARIADICのいずれかです。 省略した場合のデフォルトは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_parameter
value

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

使用できるパラメータ名と値についての更なる詳細はSET第19章を参照してください。

RESTRICT

標準SQLに準拠するためのものであり、無視されます。

integer型の二つの引数を持つプロシージャinsert_datainsert_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では省略可能です。

See Also

CREATE PROCEDURE, DROP PROCEDURE, ALTER FUNCTION, ALTER ROUTINE