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
將函式的易變性更改為指定設定。有關詳細資訊,請參閱 CREATE FUNCTION。
[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER
更改函式是安全定義者還是非安全定義者。為符合 SQL 標準,關鍵詞 EXTERNAL
被忽略。有關此功能的資訊,請參閱 CREATE FUNCTION。
PARALLEL
更改函式是否被視為可並行執行。有關詳細資訊,請參閱 CREATE FUNCTION。
LEAKPROOF
更改函式是否被視為 leakproof。有關此功能的資訊,請參閱 CREATE FUNCTION。
COST
execution_cost
更改函式的估計執行成本。有關更多資訊,請參閱 CREATE FUNCTION。
ROWS
result_rows
更改返回集函式的估計返回行數。有關更多資訊,請參閱 CREATE FUNCTION。
SUPPORT
support_function
設定或更改此函式使用的查詢計劃器支援函式。有關詳細資訊,請參閱 第 36.11 節。您必須是超級使用者才能使用此選項。
此選項不能用於完全刪除支援函式,因為它必須命名一個新的支援函式。如果您需要這樣做,請使用 CREATE OR REPLACE FUNCTION
。
configuration_parameter
value
新增或更改在呼叫函式時要對配置引數進行的賦值。如果 value
是 DEFAULT
或等效地使用 RESET
,則移除函式本地設定,以便函式在其環境中存在的 value
下執行。使用 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 中是可選的。
如果您在文件中發現任何不正確、不符合您的功能體驗或需要進一步澄清的內容,請使用 此表格 報告文件問題。