SQL 스크립트를 실행할 때 스크립트에서 첫 번째 오류가 발생하면 중지되고 일반적으로 이전 오류에 관계없이 계속되도록 지정하는 방법이 있습니까?
답변:
.psqlrc에 다음을 추가하는 솔루션은 완벽하지 않다고 생각합니다.
\set ON_ERROR_STOP on
훨씬 더 간단하고 편리한 방법이 있습니다. 매개 변수와 함께 psql을 사용하십시오.
psql -v ON_ERROR_STOP=1
또한 사용하는 것이 더 좋습니다 -X
.psqlrc 파일 사용을 끄는 매개 변수 . 나를 위해 완벽하게 작동
ps는 Peter Eisentraut의 훌륭한 게시물에서 찾은 솔루션입니다. 고마워요, 피터! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
나는 당신이 사용 psql
하고 있다고 가정합니다 . 이것은 ~/.psqlrc
파일 에 추가하는 것이 편리 할 것 입니다.
\set ON_ERROR_STOP on
이렇게하면 첫 번째 오류에서 중단됩니다. 가지고 있지 않다면 트랜잭션이 있어도 스크립트를 계속 실행하지만 스크립트가 끝날 때까지 모든 것을 실패합니다.
그리고 아마도 Paul이 말한 것처럼 트랜잭션을 사용하고 싶을 것입니다. psql --single-transaction ...
스크립트를 변경하지 않으려는 경우 에도 수행 할 수 있습니다 .
따라서 .psqlrc에 ON_ERROR_STOP이있는 완전한 예 :
psql --single-transaction --file /your/script.sql
--single-transaction
사용되며, -v ON_ERROR_STOP=1
0이 아닌 존재의 상태를 여전히 필요하다
정확히 원하는 것은 아니지만 스크립트를 시작 begin transaction;
하고로 끝나는 end transaction;
경우 실제로 첫 번째 오류 이후의 모든 것을 건너 뛴 다음 오류 이전에 수행 한 모든 작업을 롤백합니다.
저는 항상 매뉴얼을 직접 참조하고 싶습니다.
로부터 PostgreSQL의 설명서 :
종료 상태
psql이 정상적으로 완료되면 셸에 0을 반환하고, 자체 치명적인 오류 (예 : 메모리 부족, 파일을 찾을 수 없음)가 발생하면 1, 서버에 대한 연결이 잘못되어 세션이 대화 형이 아닌 경우 3, 스크립트에서 오류가 발생했으며 ON_ERROR_STOP 변수가 설정되었습니다.
기본적으로 PostgreSQL 서버에서 실행중인 SQL 코드 오류 psql은 오류를 종료하지 않습니다. 오류를 포착하고 계속합니다. 위에서 언급했듯이 ON_ERROR_STOP
설정을 on으로 설정하면 psql이 SQL 코드에서 오류를 발견하면 종료하고 3
셸로 돌아갑니다 .
-v ON_ERROR_STOP=ON
적어도 9.2에서 작동합니다. 부울 "true" 의 변형 이 허용되는 것 같습니다.