.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 |