Postgres: Código de saída diferente de zero ao executar um arquivo sql?

34

Estou escrevendo um shell script que faz chamadas ao psql usando 2 formulários ... um é pelo comando (-c), o outro é pelo arquivo (-f).

por exemplo psql -c "cria a tabela foo (número inteiro da barra)"

psql -f foobar.sql

Uma diferença entre esses formulários é que uma chamada por comando (-c) retorna um código de saída diferente de zero se um erro for encontrado, enquanto uma chamada por arquivo (-f) sempre parece retornar zero.

Gostaria de saber se existe uma solução alternativa para esse comportamento? (ou seja, retorne diferente de zero se ocorrer um erro ao executar um arquivo).

Obrigado.

Jin Kim
fonte

Respostas:

37

Você pode usar a instrução abaixo.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Isso retornará o código de retorno correto, mesmo que o foobar.sqlarquivo não seja ativado ON_ERROR_STOPna parte superior do arquivo.

Taye
fonte
21

Eu descobri como resolver isso.

Preciso ativar ON_ERROR_STOPna parte superior do arquivo.

Exemplo:

\set ON_ERROR_STOP true
Jin Kim
fonte
+1 para olhar para a página do manual :)
serverhorror
+1 para a melhor solução, pois ela permite que eu defina a variável no script, para que eu possa confiar que ela sempre é executada corretamente e não precisa se preocupar com o contexto de tempo de execução.
Brandon