[postgresql] 오류가 발생하면 Postgres 스크립트를 중지하려면 어떻게해야합니까?

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


답변

정확히 원하는 것은 아니지만 스크립트를 시작 begin transaction;하고로 끝나는 end transaction;경우 실제로 첫 번째 오류 이후의 모든 것을 건너 뛴 다음 오류 이전에 수행 한 모든 작업을 롤백합니다.


답변

저는 항상 매뉴얼을 직접 참조하고 싶습니다.

로부터 PostgreSQL의 설명서 :

종료 상태

psql이 정상적으로 완료되면 셸에 0을 반환하고, 자체 치명적인 오류 (예 : 메모리 부족, 파일을 찾을 수 없음)가 발생하면 1, 서버에 대한 연결이 잘못되어 세션이 대화 형이 아닌 경우 3, 스크립트에서 오류가 발생했으며 ON_ERROR_STOP 변수가 설정되었습니다.

기본적으로 PostgreSQL 서버에서 실행중인 SQL 코드 오류 psql은 오류를 종료하지 않습니다. 오류를 포착하고 계속합니다. 위에서 언급했듯이 ON_ERROR_STOP설정을 on으로 설정하면 psql이 SQL 코드에서 오류를 발견하면 종료하고 3셸로 돌아갑니다 .


답변