¿Hay alguna manera de especificar que cuando se ejecuta un script sql se detiene cuando encuentra el primer error en el script, por lo general continúa, independientemente de los errores anteriores?
postgresql
Rayo
fuente
fuente
-v ON_ERROR_STOP=ON
también funciona, al menos con 9.2. Sospecho que se permite cualquiera de las variantes de boolean "true" .Supongo que está utilizando
psql
, esto podría ser útil para agregar a su~/.psqlrc
archivo.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:
fuente
--single-transaction
se usa,-v ON_ERROR_STOP=1
sigue siendo necesario para un estado de existencia distinto de ceroNo es exactamente lo que desea, pero si comienza su secuencia de comandos con
begin transaction;
y termina conend transaction;
, en realidad omitirá todo después del primer error y luego revertirá todo lo que hizo antes del error.fuente
Siempre me gusta hacer referencia al manual directamente.
Del manual de PostgreSQL :
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_STOP
configuración en activado, cuando psql detecta un error en el código SQL, saldrá y regresará3
al shell.fuente