Postgres: Code de sortie non nul lors de l'exécution d'un fichier SQL?

34

J'écris un script shell qui appelle la base de données psql sous 2 formes ... l'une par commande (-c), l'autre par fichier (-f).

Par exemple, psql -c "crée une table foo (barre entière)"

psql -f foobar.sql

Une différence entre ces formes est qu'un appel par commande (-c) renvoie un code de sortie différent de zéro si une erreur est rencontrée, alors qu'un appel par fichier (-f) semble toujours renvoyer zéro.

Je me demande s'il existe une solution de contournement pour ce comportement? (ie renvoyer non nul si une erreur survient lors de l'exécution d'un fichier).

Merci.

Jin Kim
la source

Réponses:

37

Vous pouvez utiliser la déclaration ci-dessous.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Cela renverra le code de retour correct, même si le foobar.sqlfichier n'est pas activé ON_ERROR_STOPen haut du fichier.

Taye
la source
21

J'ai découvert comment résoudre ce problème.

J'ai besoin d'activer ON_ERROR_STOPen haut du fichier.

Exemple:

\set ON_ERROR_STOP true
Jin Kim
la source
+1 pour avoir regardé la page de
manuel
+1 pour la meilleure solution car elle me permet de définir la variable dans le script, afin que je puisse avoir confiance qu'elle fonctionne toujours correctement et que vous n'avez pas à vous soucier du contexte d'exécution.
Brandon