Réponses:
Je pense que la solution à ajouter à .psqlrc est loin d'être parfaite
\set ON_ERROR_STOP on
il existe un moyen beaucoup plus simple et pratique - utilisez psql avec le paramètre:
psql -v ON_ERROR_STOP=1
mieux utiliser également le -X
paramètre désactivant l'utilisation du fichier .psqlrc. Fonctionne parfaitement pour moi
ps la solution trouvée dans un excellent post de Peter Eisentraut. Merci Peter! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
Je suppose que vous utilisez psql
, cela peut être pratique à ajouter à votre ~/.psqlrc
fichier.
\set ON_ERROR_STOP on
Cela le fera abandonner sur la première erreur. Si vous ne l'avez pas, même avec une transaction, il continuera à exécuter votre script mais échouera sur tout jusqu'à la fin de votre script.
Et vous souhaitez probablement utiliser une transaction comme l'a dit Paul. Ce qui peut également être fait psql --single-transaction ...
si vous ne souhaitez pas modifier le script.
Donc un exemple complet, avec ON_ERROR_STOP dans votre .psqlrc:
psql --single-transaction --file /your/script.sql
--single-transaction
est utilisé, il -v ON_ERROR_STOP=1
est toujours nécessaire pour un statut d'existence non nul
Ce n'est pas exactement ce que vous voulez, mais si vous commencez votre script avec begin transaction;
et que vous finissez par end transaction;
, il ignorera tout après la première erreur, puis il annulera tout ce qu'il a fait avant l'erreur.
J'aime toujours me référer directement au manuel.
À partir du manuel PostgreSQL :
État de sortie
psql renvoie 0 au shell s'il s'est terminé normalement, 1 si une erreur fatale se produit (par exemple, mémoire insuffisante, fichier non trouvé), 2 si la connexion au serveur a échoué et la session n'était pas interactive, et 3 si une erreur s'est produite dans un script et la variable ON_ERROR_STOP a été définie.
Par défaut, si le code sql que vous exécutez sur le serveur PostgreSQL, l'erreur psql ne quittera pas une erreur. Il détectera l'erreur et continuera. Si, comme mentionné ci-dessus, vous définissez le ON_ERROR_STOP
paramètre sur on, lorsque psql détecte une erreur dans le code sql, il se ferme et retourne 3
au shell.
-v ON_ERROR_STOP=ON
fonctionne également, au moins avec 9.2. Je soupçonne que toutes les variantes de booléen "true" sont autorisées.