2017-09-07 1 views
0

저는 작업중인 매우 큰 SQL 덤프가 있습니다. 전체 구조는 다음과 같습니다가 단일 문에서 오류가 다음 오류가 표시 될 때와 메시지 current transaction is aborted, commands ignored until end of transaction block가 그것을 다음 각 문에 대해 생성되는 경우PostgreSQL에서 "현재 트랜잭션이 중단되었습니다 ..."메시지를 표시하지 않습니다.

BEGIN; 
SET CONSTRAINTS ALL DEFERRED; 
INSERT …; 
-- … ~300K insert operations 
INSERT …; 
COMMIT; 

문제입니다.

왜 이상하게 행동합니까? 다음 메시지를 표시하지 않을 방법이 있습니까? 실제 오류 메시지를 표시하고 트랜잭션 실행을 건너 뛰는 것으로 충분합니다. ~ 300K 개의 의미있는 오류 메시지를보고 싶지 않습니다.

덤프를 다르게 구성해야합니까? 아니면 사용할 수있는 플래그/옵션이 있습니까?

답변

1

아마 psql을 사용하여 쿼리를 서버에 보냈습니다.
ON_ERROR_STOP 기본 제공 변수를 on으로 설정할 수 있습니다. https://www.postgresql.org/docs/current/static/app-psql.html에서

:

ON_ERROR_STOP 

    By default, command processing continues after an error. When this 
    variable is set to on, processing will instead stop 
    immediately. In interactive mode, psql will return to the command 
    prompt; otherwise, psql will exit, returning error code 3 to 
    distinguish this case from fatal error conditions, which are 
    reported using error code 1. 

는 그것은 psql -v ON_ERROR_STOP=on -f script.sql 밖에 psql의에서 설정하거나 메타 명령 \set ON_ERROR_STOP on으로 스크립트 내부 또는 대화에서 할 수있다.

pg_dump에는이 사실을 덤프에 자동으로 추가하는 옵션이 없습니다 (아는 한, psql 메타 명령을 사용하지 않고 순수한 SQL 명령 만).

+0

아, 고마워! 이것은 꽤 효과적입니다. 매일 배워야 할 것이 많습니다. 그러나 덤프 파일에 직접 추가하는 방법이 있습니까? 또는 CLI 인수로만 작동합니까? –

관련 문제