★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 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_ROLE | CURRENT_USER | SESSION_USER }
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    SET SCHEMA new_schema
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    [ NO ] 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権限も必要です。 所有者を変更するには、新しい所有者ロールに対してSET ROLEができなければなりません。また、そのロールはプロシージャのスキーマにおいてCREATE権限を持たなければなりません。 (この制限により、プロシージャの削除と再作成で行うことができない処理を所有者の変更で行えないようになります。 しかし、スーパーユーザはすべての関数の所有者を変更することができます。)

パラメータ

name

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

argmode

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

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

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

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では省略可能です。

関連項目

CREATE PROCEDURE, DROP PROCEDURE, ALTER FUNCTION, ALTER ROUTINE