이벤트 트리거

이벤트 트리거 (Event Triggers)

일반 트리거(Chapter 37)만으로는 DML만 잡을 수 있어서 아쉬울 때가 있어요. 그럴 때 필요한 게 바로 이벤트 트리거입니다. 일반 트리거가 "테이블 하나에 붙어서 그 테이블의 DML만 잡는" 방식이라면, 이벤트 트리거는 "데이터베이스 전체에 걸쳐 있는" 방식으로 DDL 이벤트까지 캐치해요. 이 페이지에서 그 개념과 동작 방식을 같이 살펴볼게요.

출처: PostgreSQL 공식 문서 — event-triggers

이벤트 트리거란? (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로 작성하는 방법, 그리고 각 이벤트별 완성 예제를 볼 수 있어요.

더 알아보기 (Learn more)