Respuestas:
Creo que la solución para agregar seguimiento a .psqlrc está lejos de la perfección
\set ON_ERROR_STOP on
Existe una forma mucho más simple y conveniente: use psql con el parámetro:
psql -v ON_ERROR_STOP=1
es mejor usar también el -Xparámetro que desactiva el uso de archivos .psqlrc. Funciona perfectamente para mi
ps la solución encontrada en un gran post de Peter Eisentraut. ¡Gracias, Peter! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
Supongo que está utilizando psql, esto podría ser útil para agregar a su ~/.psqlrcarchivo.
\set ON_ERROR_STOP on
Esto hará que se anule en el primer error. Si no lo tiene, incluso con una transacción, seguirá ejecutando su script pero fallará en todo hasta el final de su script.
Y probablemente desee utilizar una transacción como dijo Paul. Lo cual también se puede hacer psql --single-transaction ...si no desea alterar el guión.
Entonces, un ejemplo completo, con ON_ERROR_STOP en su .psqlrc:
psql --single-transaction --file /your/script.sql
--single-transactionse usa, -v ON_ERROR_STOP=1sigue siendo necesario para un estado de existencia distinto de cero
No es exactamente lo que desea, pero si comienza su secuencia de comandos con begin transaction;y termina con end transaction;, en realidad omitirá todo después del primer error y luego revertirá todo lo que hizo antes del error.
Siempre me gusta hacer referencia al manual directamente.
Del manual de PostgreSQL :
Estado de salida
psql devuelve 0 al shell si finalizó normalmente, 1 si se produce un error fatal propio (por ejemplo, memoria insuficiente, archivo no encontrado), 2 si la conexión con el servidor falló y la sesión no fue interactiva y 3 si se produjo un error en un script y se estableció la variable ON_ERROR_STOP.
De forma predeterminada, si el código sql que está ejecutando en el error del servidor PostgreSQL, psql no saldrá del error. Detectará el error y continuará. Si, como se mencionó anteriormente, establece la ON_ERROR_STOPconfiguración en activado, cuando psql detecta un error en el código SQL, saldrá y regresará 3al shell.
-v ON_ERROR_STOP=ONtambién funciona, al menos con 9.2. Sospecho que se permite cualquiera de las variantes de boolean "true" .