ALTER FUNCTION — 變更函式的定義
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ]action
[ ... ] [ RESTRICT ] ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] RENAME TOnew_name
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] SET SCHEMAnew_schema
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSIONextension_name
whereaction
is one of: CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT IMMUTABLE | STABLE | VOLATILE [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER PARALLEL { UNSAFE | RESTRICTED | SAFE } COSTexecution_cost
ROWSresult_rows
SUPPORTsupport_function
SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } SETconfiguration_parameter
FROM CURRENT RESETconfiguration_parameter
RESET ALL
ALTER FUNCTION
變更函式的定義。
您必須擁有該函式才能使用 ALTER FUNCTION
。若要變更函式的綱要,您還必須具有新綱要的 CREATE
權限。若要變更擁有者,您必須能夠 SET ROLE
為新的擁有者角色,且該角色必須具有函式綱要的 CREATE
權限。(這些限制強制執行變更擁有者不會做任何您無法透過捨棄並重新建立函式來做的事情。但是,超級使用者無論如何都可以變更任何函式的擁有權。)
name
現有函式的名稱(可以選擇加上綱要限定詞)。如果未指定引數列表,則名稱在其綱要中必須是唯一的。
argmode
引數的模式:IN
、OUT
、INOUT
或 VARIADIC
。如果省略,則預設為 IN
。請注意,ALTER FUNCTION
實際上並未注意 OUT
引數,因為只需要輸入引數即可判斷函式的身分。因此,列出 IN
、INOUT
和 VARIADIC
引數就足夠了。
argname
引數的名稱。請注意,ALTER FUNCTION
實際上並未注意引數名稱,因為只需要引數資料類型即可判斷函式的身分。
argtype
函式引數的資料類型(可以選擇加上綱要限定詞),如果有的話。
new_name
函式的新名稱。
new_owner
函式的新擁有者。請注意,如果函式標記為 SECURITY DEFINER
,則它將隨後以新擁有者的身分執行。
new_schema
函式的新綱要。
DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name
此形式將函式標記為依賴於擴充功能,如果指定了 NO
,則不再依賴於該擴充功能。標記為依賴於擴充功能的函式會在捨棄擴充功能時被捨棄,即使未指定 CASCADE
。函式可以依賴於多個擴充功能,並且在捨棄其中任何一個擴充功能時都會被捨棄。
CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT
CALLED ON NULL INPUT
變更函式,使其在某些或所有引數為 null 時都會被呼叫。RETURNS NULL ON NULL INPUT
或 STRICT
變更函式,使其在任何引數為 null 時都不會被呼叫;而是自動假定為 null 結果。有關更多資訊,請參閱 CREATE FUNCTION。
IMMUTABLE
STABLE
VOLATILE
將函式的 volatility 變更為指定的設定。有關詳細資訊,請參閱 CREATE FUNCTION。
[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER
變更函式是否為安全定義器。關鍵字 EXTERNAL
會因 SQL 一致性而被忽略。有關此功能的更多資訊,請參閱 CREATE FUNCTION。
PARALLEL
變更函式是否被視為對平行處理安全。有關詳細資訊,請參閱 CREATE FUNCTION。
LEAKPROOF
變更函式是否被視為防洩漏。有關此功能的更多資訊,請參閱 CREATE FUNCTION。
COST
execution_cost
變更函式的估計執行成本。有關更多資訊,請參閱 CREATE FUNCTION。
ROWS
result_rows
變更 set-returning 函式傳回的估計列數。有關更多資訊,請參閱 CREATE FUNCTION。
SUPPORT
support_function
設定或變更用於此函式的規劃器支援函式。有關詳細資訊,請參閱第 36.11 節。您必須是超級使用者才能使用此選項。
這個選項不能完全移除支援函數,因為它必須指定一個新的支援函數。如果需要這樣做,請使用 CREATE OR REPLACE FUNCTION
。
configuration_parameter
value
新增或更改函數呼叫時要賦予組態參數的賦值。如果 value
是 DEFAULT
,或者等效地使用 RESET
,則函數本機設定會被移除,因此函數會以其環境中存在的值執行。使用 RESET ALL
清除所有函數本機設定。SET FROM CURRENT
會將執行 ALTER FUNCTION
時參數的目前值儲存為進入函數時要套用的值。
RESTRICT
為了符合 SQL 標準而被忽略。
將 integer
類型的函數 sqrt
重新命名為 square_root
:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
將 integer
類型的函數 sqrt
的擁有者變更為 joe
:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
將 integer
類型的函數 sqrt
的綱要變更為 maths
:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
將 integer
類型的函數 sqrt
標記為依賴於擴充套件 mathlib
:
ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;
調整為函數自動設定的搜尋路徑:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
停用為函數自動設定 search_path
:
ALTER FUNCTION check_password(text) RESET search_path;
該函數現在將以其呼叫者使用的任何搜尋路徑執行。
此語句與 SQL 標準中的 ALTER FUNCTION
語句部分相容。該標準允許修改函數的更多屬性,但不提供重新命名函數、使函數成為安全定義器、將組態參數值附加到函數或變更函數的擁有者、綱要或揮發性的能力。該標準還要求使用 RESTRICT
關鍵字,該關鍵字在 PostgreSQL 中是可選的。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步說明的內容,請使用此表格來報告文件問題。