C'è un modo per specificare che quando si esegue uno script sql si arresta quando si incontra il primo errore nello script, di solito continua, indipendentemente dagli errori precedenti.
Risposte:
Penso che la soluzione per aggiungere il seguito a .psqlrc sia lontana dalla perfezione
\set ON_ERROR_STOP on
esiste un modo molto più semplice e conveniente: usa psql con parametro:
psql -v ON_ERROR_STOP=1
meglio usare anche -X
parametro che disattiva l'utilizzo del file .psqlrc. Funziona perfettamente per me
ps la soluzione trovata in ottimo post da Peter Eisentraut. Grazie Peter! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
Presumo che tu stia usando psql
, questo potrebbe essere utile da aggiungere al tuo ~/.psqlrc
file.
\set ON_ERROR_STOP on
Questo lo interromperà al primo errore. Se non lo hai, anche con una transazione continuerà a eseguire lo script ma fallirà su tutto fino alla fine dello script.
E probabilmente vorrai usare una transazione come ha detto Paul. Che può essere fatto anche psql --single-transaction ...
se non si desidera modificare lo script.
Quindi un esempio completo, con ON_ERROR_STOP nel tuo .psqlrc:
psql --single-transaction --file /your/script.sql
--single-transaction
utilizzato, -v ON_ERROR_STOP=1
è comunque necessario per uno stato di esistenza diverso da zero
Non è esattamente quello che vuoi, ma se inizi lo script con begin transaction;
e finisci con end transaction;
, in realtà salterà tutto dopo il primo errore, quindi ripristinerà tutto ciò che ha fatto prima dell'errore.
Mi piace sempre fare riferimento direttamente al manuale.
Dal manuale PostgreSQL :
Stato di uscita
psql restituisce 0 alla shell se è terminata normalmente, 1 se si verifica un errore fatale (ad esempio memoria insufficiente, file non trovato), 2 se la connessione al server è andata male e la sessione non era interattiva e 3 se si è verificato un errore in uno script ed è stata impostata la variabile ON_ERROR_STOP.
Per impostazione predefinita, se il codice sql in esecuzione sul server PostgreSQL errore psql non uscirà da un errore. Rileverà l'errore e continuerà. Se, come accennato in precedenza, si imposta l' ON_ERROR_STOP
impostazione su on, quando psql rileva un errore nel codice sql, uscirà e tornerà 3
alla shell.
-v ON_ERROR_STOP=ON
funziona anche, almeno con 9.2. Sospetto che sia consentita una qualsiasi delle varianti di booleano "true" .