CREATE EVENT TRIGGER — 새 이벤트 트리거 정의
CREATE EVENT TRIGGER이름
ON이벤트
[ WHEN조건변수
IN (조건값 [, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }함수이름
()
CREATE EVENT TRIGGER
명령은 새 이벤트 트리거를 만든다.
이 이벤트 트리거는
지정한 이벤트가 있고, 그 트리거 WHEN
조건절에서
지정한 조건에 맞으면, 지정한 트리거 함수가 실행 되도록 한다.
이벤트 트리거에 대한 보다 자세한 설명은 39장에서
한다. 이벤트 트리거를 만드는 사용자가 그 트리거의 소유주가 된다.
이름
새 이벤트 트리거 이름. 이 이름은 접속한 데이터베이스 안에서 유일해야 한다.
이벤트
이벤트 트리거용 함수가 실행되는 그 이벤트 이름. 이벤트 이름에 대한 자세한 설명은 39.1절에서 한다.
조건변수
이벤트 가운데, 지정한 함수가 실행될 조건을 지정할 조건 변수 이름.
이것은 지정한 이벤트 가운데서도 어느 특정 상황에서만 트리거
함수가 실행되도록 한다. 현재 사용할 수 있는
조건변수
용
이름은 TAG
뿐이다.
조건값
위 조건 변수에 지정할 변수 값이다.
TAG
변수에 지정할 수 있는 값은
SQL 명령이다(예, 'DROP FUNCTION'
).
함수이름
해당 이벤트 발생시 작업할 함수 이름.
이 함수는 입력 인자는 없고, 반환값은 event_trigger
자료형인 함수여야 한다.
CREATE EVENT TRIGGER
구문에서
FUNCTION
과 PROCEDURE
는
같은 의미다. 하지만, 여기서 지정할 수 있는 것은
프로시져가 아니라, 함수만 가능하다. 현재 구문은 하위 호환성 때문에
있으며, PROCEDURE
키워드는 사라질 예정이다.
이벤트 트리거는 슈퍼유저만 만들 수 있다.
이벤트 트리거는 단일 사용자 모드(postgres)에서는 비활성화 된다. 어떤 오류가 있는 이벤트 트리거를 해당 데이터베이스에 지정하면, 이 트리거를 지우지 못한는 상황이 발생할 수도 있다. 이 때는 단일 사용자 모드로 재실행 해서 해당 이벤트 트리거를 지워야 한다.
모든 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();
CREATE EVENT TRIGGER
구문은 표준 SQL 구문이 아니다.