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
與 associated 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
語句。
如果您在文件中發現任何不正確、與您實際體驗不符或需要進一步澄清的內容,請使用 此表單 來報告文件問題。