CREATE EVENT TRIGGER — 定義一個新的事件觸發器
CREATE EVENT TRIGGERnameONevent[ WHENfilter_variableIN (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 語句。
如果您在文件中發現任何不正確、與您實際體驗不符或需要進一步澄清的內容,請使用 此表單 來報告文件問題。