CREATE EVENT TRIGGER — 定義一個新的事件觸發器
CREATE EVENT TRIGGERname
ONevent
[ WHENfilter_variable
IN (filter_value
[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }function_name
()
CREATE EVENT TRIGGER
會建立一個新的事件觸發器。每當指定的事件發生,並且與觸發器相關聯的 WHEN
條件(如果有的話)滿足時,將會執行觸發器函數。 有關事件觸發器的常規介紹,請參閱第 38 章。 建立事件觸發器的使用者將成為其擁有者。
name
給予新觸發器的名稱。 此名稱在資料庫中必須是唯一的。
event
觸發呼叫給定函數的事件名稱。 有關事件名稱的更多資訊,請參閱第 38.1 節。
filter_variable
用於過濾事件的變數名稱。 這使得將觸發器的觸發限制為支援它的案例的子集成為可能。 目前唯一支援的 filter_variable
是 TAG
。
filter_value
觸發器應觸發的關聯 filter_variable
的值清單。 對於 TAG
,這表示命令標籤的清單(例如,'DROP FUNCTION'
)。
function_name
一個使用者提供的函數,它被宣告為不帶參數且傳回類型為 event_trigger
。
在 CREATE EVENT TRIGGER
的語法中,關鍵字 FUNCTION
和 PROCEDURE
是等效的,但是所引用的函數在任何情況下都必須是一個函數,而不是一個程序。 這裡使用關鍵字 PROCEDURE
是歷史遺留原因,並且已被棄用。
只有超級使用者才能建立事件觸發器。
事件觸發器在單使用者模式下(請參閱 postgres)以及當 event_triggers 設定為 false
時會被停用。 如果錯誤的事件觸發器停用了資料庫,以至於您甚至無法刪除該觸發器,請重新啟動並將 event_triggers 設定為 false
以暫時停用事件觸發器,或者在單使用者模式下,您將能夠執行此操作。
禁止執行任何 DDL 命令
CREATE OR REPLACE FUNCTION abort_any_command() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE EXCEPTION 'command % is disabled', tg_tag; END; $$; CREATE EVENT TRIGGER abort_ddl ON ddl_command_start EXECUTE FUNCTION abort_any_command();
SQL 標準中沒有 CREATE EVENT TRIGGER
陳述式。
如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表格報告文件問題。