CREATE EVENT TRIGGER — 새 이벤트 트리거 정의하기

CREATE EVENT TRIGGER — 새 이벤트 트리거 정의하기

CREATE EVENT TRIGGER 명령은 지정된 이벤트가 발생하고 트리거와 연결된 WHEN 조건을 만족할 때 트리거 함수를 실행하는 새 이벤트 트리거를 만드는 명령이에요. DDL 명령 같은 데이터베이스 이벤트 전역에서 동작하는 트리거예요.

출처: PostgreSQL 문서

본문

Synopsis

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

Description

CREATE EVENT TRIGGER는 새 이벤트 트리거를 생성해요. 지정된 이벤트가 발생하고, 트리거와 연결된 WHEN 조건(있을 경우)을 만족할 때마다 트리거 함수가 실행돼요. 이벤트 트리거에 대한 일반적인 소개는 38장을 참고해요. 이벤트 트리거를 생성한 사용자가 그 소유자가 돼요.

Parameters

name

새 트리거에 부여할 이름이에요. 이 이름은 데이터베이스 안에서 고유해야 해요.

event

주어진 함수를 호출하게 만드는 이벤트의 이름이에요. 이벤트 이름에 대한 자세한 정보는 38.1 절을 참고해요.

filter_variable

이벤트를 필터링하는 데 사용되는 변수의 이름이에요. 이는 트리거의 발화를 지원되는 사례의 일부로 제한할 수 있게 해줘요. 현재 지원되는 유일한 *filter_variable*은 TAG예요.

filter_value

트리거가 발화해야 하는 연결된 *filter_variable*에 대한 값 목록이에요. TAG의 경우 명령 태그 목록(예: 'DROP FUNCTION')을 의미해요.

function_name

인자를 받지 않고 event_trigger 타입을 반환하도록 선언된 사용자 제공 함수예요.

CREATE EVENT TRIGGER 문법에서 키워드 FUNCTIONPROCEDURE는 동등하지만, 참조되는 함수는 어쨌든 함수여야 하며 프로시저가 아니어야 해요. 여기서 PROCEDURE 키워드의 사용은 역사적인 것이며 더 이상 사용되지 않아요(deprecated).

Notes

이벤트 트리거를 생성할 수 있는 것은 슈퍼유저뿐이에요.

이벤트 트리거는 단일 사용자 모드(postgres 참고)와 event_triggers가 false로 설정된 경우 모두 비활성화돼요. 잘못된 이벤트 트리거가 데이터베이스를 너무 많이 비활성화해서 트리거를 삭제조차 할 수 없는 경우, event_triggers를 false로 설정하거나 단일 사용자 모드로 재시작해 이벤트 트리거를 일시적으로 비활성화하면 삭제할 수 있게 돼요.

Examples

모든 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();

Compatibility

SQL 표준에는 CREATE EVENT TRIGGER 문이 없어요.

더 알아보기 (Learn more)