PostgreSQL CREATE EVENT TRIGGER

2021-09-09 10:23 更新

CREATE EVENT TRIGGER — 定義一個(gè)新的事件觸發(fā)器

大綱

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

描述

CREATE EVENT TRIGGER創(chuàng)建一個(gè)新的事件觸發(fā)器。 只要指定的事件發(fā)生并且與該觸發(fā)器相關(guān)的WHEN條件(如果有)被 滿足,該觸發(fā)器的函數(shù)將被執(zhí)行。關(guān)于事件觸發(fā)器的一般性介紹可見 第 39 章。創(chuàng)建事件觸發(fā)器的用戶會(huì)成為它的擁有者。

參數(shù)

name

給新觸發(fā)器的名稱。在該數(shù)據(jù)庫中這個(gè)名稱必須唯一。

event

會(huì)觸發(fā)對給定函數(shù)調(diào)用的事件名稱。更多事件名稱的信息請見 第 39.1 節(jié)。

filter_variable

用來過濾事件的變量名稱。這可以用來限制觸發(fā)器只為它支持的那一部分 情況引發(fā)。當(dāng)前唯一支持的 filter_variableTAG。

filter_value

與該觸發(fā)器要為其引發(fā)的 filter_variable相關(guān)聯(lián) 的一個(gè)值列表。對于TAG,這表示一個(gè)命令標(biāo)簽列表(例如 'DROP FUNCTION')。

function_name

一個(gè)用戶提供的函數(shù),它被聲明為沒有參數(shù)并且返回類型 event_trigger。

CREATE EVENT TRIGGER的語法中,關(guān)鍵字CREATE EVENT TRIGGERPROCEDURE是等效的,但是被引用的函數(shù)在任何情況下都必須是函數(shù),而不是過程。 此處關(guān)鍵字PROCEDURE的使用是歷史性的,已棄用。

注解

只有超級用戶能創(chuàng)建事件觸發(fā)器。

在單用戶模式(見postgres)中事件觸發(fā)器被禁用。 如果一個(gè)錯(cuò)誤的事件觸發(fā)器禁用了數(shù)據(jù)庫讓你甚至無法刪除它,可以重啟到 單用戶模式,這樣你就能刪除它。

示例

禁止執(zhí)行任何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 標(biāo)準(zhǔn)中沒有 CREATE EVENT TRIGGER語句。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號