Existe-t-il un moyen de spécifier que lors de l'exécution d'un script sql, il s'arrête lorsqu'il rencontre la première erreur sur le script, il continue généralement, quelles que soient les erreurs précédentes.
postgresql
Rayon
la source
la source
-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.Je suppose que vous utilisez
psql
, cela peut être pratique à ajouter à votre~/.psqlrc
fichier.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:
la source
--single-transaction
est utilisé, il-v ON_ERROR_STOP=1
est toujours nécessaire pour un statut d'existence non nulCe n'est pas exactement ce que vous voulez, mais si vous commencez votre script avec
begin transaction;
et que vous finissez parend transaction;
, il ignorera tout après la première erreur, puis il annulera tout ce qu'il a fait avant l'erreur.la source
J'aime toujours me référer directement au manuel.
À partir du manuel PostgreSQL :
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 retourne3
au shell.la source