이벤트 트리거
이벤트 트리거 (Event Triggers)
일반 트리거(Chapter 37)만으로는 DML만 잡을 수 있어서 아쉬울 때가 있어요. 그럴 때 필요한 게 바로 이벤트 트리거입니다. 일반 트리거가 "테이블 하나에 붙어서 그 테이블의 DML만 잡는" 방식이라면, 이벤트 트리거는 "데이터베이스 전체에 걸쳐 있는" 방식으로 DDL 이벤트까지 캐치해요. 이 페이지에서 그 개념과 동작 방식을 같이 살펴볼게요.
이벤트 트리거란? (What are Event Triggers?)
PostgreSQL은 Chapter 37에서 다룬 트리거 메커니즘을 보완하기 위해 이벤트 트리거(event triggers)도 제공해요.
- 일반 트리거(regular triggers)는 단일 테이블에 붙어서 DML 이벤트만 캡처하는 방식이에요.
- 이벤트 트리거는 특정 데이터베이스에 전역적(global) 으로 적용되며, DDL 이벤트까지 캡처할 수 있답니다.
즉, 특정 테이블의 INSERT/UPDATE/DELETE 같은 DML이 아니라, 테이블 생성·수정·삭제 같은 DDL 작업이 발생했을 때를 감지하고 싶을 때 이벤트 트리거를 쓰는 거죠.
이벤트 트리거를 작성하는 방법 (How to Write Event Triggers)
일반 트리거와 마찬가지로, 이벤트 트리거는 다음 중 한 방식으로 작성할 수 있어요.
- 이벤트 트리거 지원 기능이 포함된 프로시저 언어(procedural language)
- C 언어
하지만 순수 SQL(plain SQL)로는 작성할 수 없어요. 이것만큼은 꼭 기억해 두세요.
이벤트 트리거의 종류 (Kinds of Event Triggers)
이벤트 트리거가 어떤 시점에 발생하는지는 이벤트 종류에 따라 달라져요. 주요 이벤트는 다음과 같아요.
| 이벤트 | 설명 |
|---|---|
login |
사용자가 세션에 로그인할 때 발생해요. |
ddl_command_start |
DDL 명령이 실행되기 직전(시작 시점)에 발생해요. |
ddl_command_end |
DDL 명령이 실행된 직후(끝 시점)에 발생해요. |
sql_drop |
데이터베이스 객체가 삭제(DROP)될 때 발생해요. |
table_rewrite |
테이블이 재작성(rewrite)될 때 발생해요. |
이 외에도 세부 문서에서 이벤트 트리거를 만드는 방법, C로 작성하는 방법, 그리고 각 이벤트별 완성 예제를 볼 수 있어요.