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


Ich schreibe ein Shell-Skript, das Aufrufe von psql unter Verwendung von 2 Forms macht ... einer ist per Befehl (-c), der andere ist nach Datei (-f).

z.B. psql -c "Tabelle foo erstellen (ganze Zahl)"

psql -f foobar.sql

Ein Unterschied zwischen diesen Formen besteht darin, dass ein Aufruf per Befehl (-c) einen Nicht-Null-Beendigungscode zurückgibt, wenn ein Fehler auftritt, während ein Aufruf nach Datei (-f) immer Null zurückgibt.

Ich frage mich, ob es eine Abhilfe für dieses Verhalten gibt? (d. h. Rückgabewert ungleich Null, wenn während der Ausführung einer Datei ein Fehler auftritt).

Vielen Dank.


31
2018-06-09 18:39


Ursprung




Antworten:


Sie können die folgende Anweisung verwenden.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Dies liefert den korrekten Rückgabecode sogar zurück foobar.sql Datei wird nicht aktiviert ON_ERROR_STOP am Anfang der Datei.


35
2018-06-10 09:11





Ich habe herausgefunden, wie ich das lösen kann.

Ich muss aktivieren ON_ERROR_STOP am Anfang der Datei.

Beispiel:

\set ON_ERROR_STOP true

19
2018-06-09 18:51



+1 für das Betrachten der Manpage :) - serverhorror
+1 für die beste Lösung, weil es mir erlaubt, die Variable zu setzen im das Skript, damit ich darauf vertrauen kann, dass es immer korrekt läuft und sich nicht um den Laufzeitkontext kümmern muss. - Brandon