설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 72건, 최근 0 건
   

에러시 일괄 배치 중지하기 (2/2)

글쓴이 : PostgresDBA 날짜 : 2013-06-24 (월) 17:06 조회 : 3662
반드시 "에러시 일괄 배치 중지하기 (1/2)" 게시글을 먼저 읽으셔야 합니다.

[postgres@olmaster:~/oradba]$ cat test2.sql
\set ON_ERROR_STOP
create table a1(a int);
create table a2(a int89);      -- 잘못된 데이터타입
create table a3(a int);

[postgres@olmaster:~/oradba]$ psql -U scott -f test2.sql
CREATE TABLE
psql:test.sql:3: ERROR:  type "int89" does not exist
LINE 1: create table a2(a int89);


여기서 질문하나, a2 테이블 생성과정에서 에러가 발생했습니다.
이때 a1 테이블은 정상적으로 생성되었을까요? 아니면 롤백되서 존재하지 않을까요?
(Oracle 과 달리 PostgreSQL 은 ddl 까지 롤백할수 있습니다.)

-> 정답 a1 테이블은 정상적으로 생성되어서 존재합니다.

만약 여기서 test2.sql 안의 명령어 수행시, 에러를 만나면 에러 전에 수행되었던
dml 이나 ddl 을 모두 롤백시키고자 한다면 어떻게 할까요?


[postgres@olmaster:~/oradba]$ psql -U scott --single-transaction -f test2.sql
CREATE TABLE
psql:test.sql:3: ERROR:  type "int89" does not exist
LINE 1: create table a2(a int89);

[postgres@olmaster:~/oradba]$

--single-transaction 옵션을 지정할경우 test2.sql 의 모든 문은 하나의 트랜잭션으로 처리되어
a2 테이블 생성시 에러가 발생하면 정상적으로 생성되었던 a1 테이블까지 롤백되어
a1 테이블 자체가 존재하지 않게 됩니다!!

   

postgresdba.com