Postgres: ¿Código de salida distinto de cero al ejecutar un archivo sql?

34

Estoy escribiendo un script de shell que realiza llamadas a psql usando 2 formas ... una es por comando (-c), la otra es por archivo (-f).

por ejemplo, psql -c "crear tabla foo (entero de barra)"

psql -f foobar.sql

Una diferencia entre estos formularios es que una llamada por comando (-c) devuelve un código de salida distinto de cero si se encuentra un error, mientras que una llamada por archivo (-f) siempre parece devolver cero.

Me pregunto si hay una solución para este comportamiento. (es decir, devuelve un valor distinto de cero si se produce un error al ejecutar un archivo).

Gracias.

Jin Kim
fuente

Respuestas:

37

Puedes usar la siguiente declaración.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Esto devolverá el código de retorno correcto, incluso el foobar.sqlarchivo no se habilita ON_ERROR_STOPen la parte superior del archivo.

Taye
fuente
21

Descubrí cómo resolver esto.

Necesito habilitar ON_ERROR_STOPen la parte superior del archivo.

Ejemplo:

\set ON_ERROR_STOP true
Jin Kim
fuente
+1 por mirar la página de manual :)
serverhorror
+1 para la mejor solución porque me permite establecer la variable en el script, por lo que puedo confiar en que siempre se ejecuta correctamente y no tengo que preocuparme por el contexto de tiempo de ejecución.
Brandon