아래 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
[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에서 이동 됨]