支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3

CREATE EVENT TRIGGER

CREATE EVENT TRIGGER — 定義一個新的事件觸發器

概要

CREATE EVENT TRIGGER name
    ON event
    [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ]
    EXECUTE { FUNCTION | PROCEDURE } function_name()

描述

CREATE EVENT TRIGGER 會建立一個新的事件觸發器。每當指定的事件發生,並且與觸發器相關聯的 WHEN 條件(如果有的話)滿足時,將會執行觸發器函數。 有關事件觸發器的常規介紹,請參閱第 38 章。 建立事件觸發器的使用者將成為其擁有者。

參數

name

給予新觸發器的名稱。 此名稱在資料庫中必須是唯一的。

event

觸發呼叫給定函數的事件名稱。 有關事件名稱的更多資訊,請參閱第 38.1 節

filter_variable

用於過濾事件的變數名稱。 這使得將觸發器的觸發限制為支援它的案例的子集成為可能。 目前唯一支援的 filter_variableTAG

filter_value

觸發器應觸發的關聯 filter_variable 的值清單。 對於 TAG,這表示命令標籤的清單(例如,'DROP FUNCTION')。

function_name

一個使用者提供的函數,它被宣告為不帶參數且傳回類型為 event_trigger

CREATE EVENT TRIGGER 的語法中,關鍵字 FUNCTIONPROCEDURE 是等效的,但是所引用的函數在任何情況下都必須是一個函數,而不是一個程序。 這裡使用關鍵字 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 陳述式。

提交更正

如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表格報告文件問題。