Database

[Database] 트리거(Trigger)

spursOnTop 2025. 3. 18. 21:07
반응형

트리거(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