[PostgreSQL] SQL Error Handling

2025. 2. 23. 23:26·개발 (Development)/PostgreSQL

.sql 파일을 실행할 때 실행 방식에 따라 에러 발생 시 다음 문장의 실행 여부가 달라집니다.

1. 일반적인 SQL 실행 방식

대부분의 SQL 실행 도구(MySQL, PostgreSQL, Oracle 등)에서는 각각의 SQL 문장이 독립적으로 실행됩니다. 따라서 한 문장에서 에러가 발생해도 다음 문장이 실행될 수 있습니다.

예를 들어, PostgreSQL에서 psql을 사용하여 script.sql을 실행하면:

psql -d mydb -f script.sql

이 경우, 한 문장에서 에러가 발생해도 다음 문장은 그대로 실행됩니다.

2. 트랜잭션(TRANSACTION) 내에서 실행할 경우

BEGIN ... COMMIT / ROLLBACK 블록 안에서 실행하면, 에러 발생 시 전체 트랜잭션이 롤백될 수 있습니다. 트랜잭션 내에서 실행하는 경우, 기본적으로 하나의 문장이 실패하면 전체 실행이 중단됩니다.

예제:

BEGIN;

INSERT INTO users (id, name) VALUES (1, 'Alice');
INSERT INTO users (id, name) VALUES (1, 'Bob'); -- PRIMARY KEY 중복으로 에러 발생
INSERT INTO users (id, name) VALUES (2, 'Charlie'); -- 실행되지 않음

COMMIT;

위 경우, 두 번째 INSERT 문에서 에러가 발생하면 ROLLBACK 되며, 이후 문장은 실행되지 않습니다.

3. TRY...CATCH 사용 (PL/pgSQL, T-SQL 등)

PostgreSQL의 PL/pgSQL, SQL Server의 T-SQL에서는 BEGIN ... EXCEPTION 또는 TRY...CATCH 블록을 사용하여 개별적으로 오류를 처리할 수 있습니다.

PostgreSQL 예제:

DO $$
BEGIN
    INSERT INTO users (id, name) VALUES (1, 'Alice');
    INSERT INTO users (id, name) VALUES (1, 'Bob'); -- 에러 발생
EXCEPTION
    WHEN unique_violation THEN
        RAISE NOTICE 'Duplicate key error, continuing execution';
END $$;

INSERT INTO users (id, name) VALUES (2, 'Charlie'); -- 실행됨

이렇게 하면, 특정 오류를 무시하고 다음 문장을 실행할 수도 있습니다.

결론

  • .sql 파일을 실행할 때 일반적으로 에러가 발생해도 다음 문장은 계속 실행됩니다.
  • 트랜잭션 안에서 실행하면 하나의 에러가 전체 실행을 멈출 수 있습니다.
  • 오류를 개별적으로 처리하려면 TRY...CATCH 같은 예외 처리 기능을 사용해야 합니다.
반응형

'개발 (Development) > PostgreSQL' 카테고리의 다른 글

[PostgreSQL] PostgreSQL에서 특정 값의 존재 여부 확인하여 조회하기  (0) 2025.03.16
PostgreSQL에서 기존 데이터가 있는 상태에서 복원하기  (0) 2025.02.23
[PostgreSQL] JSON 컬럼에서 Key-Value 추출 및 MyBatis 연동  (0) 2025.02.23
[PostgreSQL/TimescaleDB] Hypertable과 Chunk를 포함한 최소 크기 덤프 방법  (0) 2025.02.17
[PostgreSQL] 데이터베이스 용량 조회 방법  (0) 2025.02.17
'개발 (Development)/PostgreSQL' 카테고리의 다른 글
  • [PostgreSQL] PostgreSQL에서 특정 값의 존재 여부 확인하여 조회하기
  • PostgreSQL에서 기존 데이터가 있는 상태에서 복원하기
  • [PostgreSQL] JSON 컬럼에서 Key-Value 추출 및 MyBatis 연동
  • [PostgreSQL/TimescaleDB] Hypertable과 Chunk를 포함한 최소 크기 덤프 방법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (238)
      • 개발 (Development) (171)
        • Algorithm (1)
        • Angular (1)
        • AWS (7)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (36)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (34)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (12)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Vue.js
    AWS
    python
    Kubernetes
    ADsP
    docker
    MyBatis
    파이썬
    JSON
    DevOps
    리눅스 마스터 2급
    javascript
    timescaledb
    springboot
    Kafka
    데이터분석
    pandas
    오답노트
    백준
    Linux
    리눅스 마스터 2급 2차
    백준자바
    자바
    백준알고리즘
    deepseek
    백준온라인저지
    PostgreSQL
    java
    JPA
    Linux master
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[PostgreSQL] SQL Error Handling
상단으로

티스토리툴바