반응형
트리거(Trigger)란?
트리거(Trigger)는 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 기능으로, 특정 테이블에서 데이터가 변경될 때 추가적인 로직을 실행하고 싶을 때 사용
로그 기록, 특정 필드 자동 업데이트 등으로 활용 가능
트리거 실행 원리
- DBMS 내부에는 테이블 별로
"연결된 트리거 목록"을 메타데이터(시스템 테이블)로 관리 중 - 사용자가 DML(INSERT/UPDATE/DELETE) 명령을 실행하면, ➔ DB 엔진이 해당 테이블의 트리거를 자동으로 찾아서 호출
- 이벤트 리스너와 비슷한 개념
-- 트리거 리스트 조회 (PG)
SELECT *
FROM pg_trigger
WHERE NOT tgisinternal; -- 내부 시스템 트리거 제외
--tgname 트리거 이름
--tgrelid 트리거가 연결된 테이블 (OID)
--tgfoid 트리거 실행 함수 (OID)
--tgtype 트리거 종류 (BEFORE/AFTER, INSERT/UPDATE/DELETE 구분 비트)
--tgenabled 트리거 활성화 여부
--tgargs 트리거에 전달되는 인자들
트리거 이벤트
- INSERT, UPDATE, DELETE 중 어떤 작업이 발생했을 때 실행할지 지정
트리거 타이밍
- BEFORE : 이벤트 발생 전 트리거 실행
- AFTER : 이벤트 발생 후 트리거 실행
- INSTEAD OF : 트리거가 실행되면 원래 이벤트를 대신하여 실행 (뷰에서 주로 사용됨)
트리거 함수 (Trigger Function)
- 트리거는 단독으로 실행되지 않고, 반드시 트리거 함수를 호출하여 실행
-- 트리거 함수 생성
-- NEW.키워드를 통해 INSERT된 데이터를 가져올 수 있음
CREATE OR REPLACE FUNCTION log_changes()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO log_table (date, jsonData)
VALUES (sysdate, NEW.jsonData );
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
- 트리거 생성
-- 트리거 생성: test_table 에서 INSERT가 발생하면 log_changes() 실행
CREATE TRIGGER test_table_insert_trigger
AFTER INSERT ON test_table
FOR EACH ROW
EXECUTE FUNCTION log_changes();
반응형
'Database' 카테고리의 다른 글
[Database] B-Tree 인덱스 (0) | 2025.03.26 |
---|---|
[PostgreSQL] Vacuum (0) | 2025.03.05 |
[Database/JAVA] Connection Pool (0) | 2025.02.19 |