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


총 게시물 72건, 최근 0 건
   

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

글쓴이 : PostgresDBA 날짜 : 2013-06-24 (월) 16:00 조회 : 4088
아래 test.sql 화일과 갈이 일련의 sql 문들이 저장되어 있는 화일이 있습니다.
이 sql 명령을 한꺼번에 실생하라면  psql 다음에 -f 옵션을 지정하여 화일명을 지정하면 됩니다.
그런데 sql 문을 자세히 보니깐, 
select version; 구문이 잘못됐네요. 괄호가 빠졌네요.
정확한 구문은 select version(); 입니다.

[postgres@olmaster:~/oradba]$ cat test.sql
select current_user;
select version;
select current_schema;

잘못된 구문을 수정하지 않고, -f 옵션 지정하여 그냥 실행하면 어찌될까요?

[postgres@olmaster:~/oradba]$ psql -f test.sql
current_user
--------------
postgres
(1 row)


psql:test.sql:2: ERROR:  column "version" does not exist
LINE 1: select version;
      ^
current_schema
----------------
public
(1 row)

[postgres@olmaster:~/oradba]$ 

위의 결과를 보면 version 관련 구문에서 에러를 밸었구, 그 다음 문장인 select current_schema; 문은 정상 실행되었습니다.

아이고 이런..
우리가 원하는건 에러나는 구문에서 더 이상 진행되지 않고 멈추는 겁니다.
즉 select version; 에서 에러발생하면 그 아래의 sql 문은 더이상 실행시키고 싶지 않습니다.
어떻게 하면 될까요??
아주 쉽습니다. 아래 처럼!!


[postgres@olmaster:~/oradba]$ psql -f test.sql -v ON_ERROR_STOP=ON
current_user
--------------
postgres
(1 row)


psql:test.sql:2: ERROR:  column "version" does not exist
LINE 1: select version;
      ^
[postgres@olmaster:~/oradba]$ 

또 다른 방법은 -v 옵션 지정없이 test.sql 화일 안에 지정할수도 있습니다.
아래 처럼 말이죠.

[postgres@olmaster:~/oradba]$ cat test.sql
\set ON_ERROR_STOP
select current_user;
select version;
select current_schema;

[postgres@olmaster:~/oradba]$ psql -f test.sql
 current_user
--------------
 postgres
(1 row)


psql:test.sql:2: ERROR:  column "version" does not exist
LINE 1: select version;
       ^
[postgres@olmaster:~/oradba]$ 
[이 게시물은 PostgresDBA님에 의해 2013-06-24 16:57:11 SQL에서 이동 됨]

PostgresDBA 2015-01-02 (금) 14:38
\set ON_ERROR_STOP on/off
댓글주소
   

postgresdba.com