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

與 associated 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 語句。

提交更正

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