Postgres: Exit-Code ungleich Null beim Ausführen einer SQL-Datei?

34

Ich schreibe ein Shell-Skript, das mit 2 Formen psql aufruft ... eine per Befehl (-c), die andere per Datei (-f).

zB psql -c "create table foo (bar integer)"

psql -f foobar.sql

Ein Unterschied zwischen diesen Formularen besteht darin, dass ein Aufruf per Befehl (-c) einen Exit-Code ungleich Null zurückgibt, wenn ein Fehler auftritt, während ein Aufruf per Datei (-f) immer Null zurückzugeben scheint.

Ich frage mich, ob es eine Problemumgehung für dieses Verhalten gibt. (dh es wird ein Wert ungleich Null zurückgegeben, wenn beim Ausführen einer Datei ein Fehler auftritt).

Vielen Dank.

Jin Kim
quelle

Antworten:

37

Sie können die folgende Anweisung verwenden.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Dies gibt den korrekten Rückkehrcode zurück, auch wenn die foobar.sqlDatei ON_ERROR_STOPoben in der Datei nicht aktiviert ist .

Taye
quelle
21

Ich habe herausgefunden, wie ich das beheben kann.

Ich muss ON_ERROR_STOPoben in der Datei aktivieren .

Beispiel:

\set ON_ERROR_STOP true
Jin Kim
quelle
+1 für das Betrachten der Manpage :)
Serverhorror
+1 für die beste Lösung, da ich die Variable im Skript festlegen kann, damit ich darauf vertrauen kann, dass sie immer korrekt ausgeführt wird und mich nicht um den Laufzeitkontext kümmern muss.
Brandon