支援版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援版本:12 / 11

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

where action is one of:

    [ 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,則不再依賴於該擴充功能。標記為依賴於擴充功能的程序會在刪除擴充功能時刪除,即使未指定 cascade 也是如此。程序可以依賴於多個擴充功能,並且會在刪除其中任何一個擴充功能時刪除。

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

變更程序是否為安全性定義者。關鍵字 EXTERNAL 會為了 SQL 一致性而被忽略。有關此功能的更多資訊,請參閱 CREATE PROCEDURE

configuration_parameter
value

新增或變更在呼叫程序時要指派給組態參數的指派。如果 valueDEFAULT,或等效地使用 RESET,則會移除程序本機設定,以便程序使用其環境中存在的值執行。使用 RESET ALL 清除所有程序本機設定。SET FROM CURRENT 將執行 ALTER PROCEDURE 時的參數值儲存為進入程序時要套用的值。

有關允許的參數名稱和值的更多資訊,請參閱 SET第 19 章

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 中是可選的。

提交更正

如果您在文件中發現任何不正確、與您特定功能的使用經驗不符或需要進一步澄清的地方,請使用 此表單 回報文件問題。