支援的版本:目前版本 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本: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

ALTER FUNCTION

ALTER FUNCTION — 變更函式的定義

概要

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

where action 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 }
    COST execution_cost
    ROWS result_rows
    SUPPORT support_function
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

說明

ALTER FUNCTION 變更函式的定義。

您必須擁有該函式才能使用 ALTER FUNCTION。若要變更函式的綱要,您還必須具有新綱要的 CREATE 權限。若要變更擁有者,您必須能夠 SET ROLE 為新的擁有者角色,且該角色必須具有函式綱要的 CREATE 權限。(這些限制強制執行變更擁有者不會做任何您無法透過捨棄並重新建立函式來做的事情。但是,超級使用者無論如何都可以變更任何函式的擁有權。)

參數

name

現有函式的名稱(可以選擇加上綱要限定詞)。如果未指定引數列表,則名稱在其綱要中必須是唯一的。

argmode

引數的模式:INOUTINOUTVARIADIC。如果省略,則預設為 IN。請注意,ALTER FUNCTION 實際上並未注意 OUT 引數,因為只需要輸入引數即可判斷函式的身分。因此,列出 ININOUTVARIADIC 引數就足夠了。

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 INPUTSTRICT 變更函式,使其在任何引數為 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

新增或更改函數呼叫時要賦予組態參數的賦值。如果 valueDEFAULT,或者等效地使用 RESET,則函數本機設定會被移除,因此函數會以其環境中存在的值執行。使用 RESET ALL 清除所有函數本機設定。SET FROM CURRENT 會將執行 ALTER FUNCTION 時參數的目前值儲存為進入函數時要套用的值。

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

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

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步說明的內容,請使用此表格來報告文件問題。