2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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

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

新增或更改在呼叫函式時要對配置引數進行的賦值。如果 valueDEFAULT 或等效地使用 RESET,則移除函式本地設定,以便函式在其環境中存在的 value 下執行。使用 RESET ALL 清除所有函式本地設定。SET FROM CURRENTALTER 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 中是可選的。

提交更正

如果您在文件中發現任何不正確、不符合您的功能體驗或需要進一步澄清的內容,請使用 此表格 報告文件問題。