Postgres: niezerowy kod wyjścia podczas wykonywania pliku SQL?

34

Piszę skrypt powłoki, który wywołuje psql przy użyciu 2 formularzy ... jeden z poleceń (-c), drugi z plików (-f).

np. psql -c "utwórz tabelę foo (liczba całkowita bar)"

psql -f foobar.sql

Jedną z różnic między tymi formami jest to, że wywołanie przez polecenie (-c) zwraca niezerowy kod wyjścia, jeśli wystąpi błąd, podczas gdy wywołanie przez plik (-f) zawsze wydaje się zwracać zero.

Zastanawiam się, czy istnieje obejście tego zachowania? (tzn. zwraca wartość niezerową, jeśli wystąpi błąd podczas wykonywania pliku).

Dzięki.

Jin Kim
źródło

Odpowiedzi:

37

Możesz użyć poniższej instrukcji.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Zwróci to prawidłowy kod powrotu, nawet jeśli foobar.sqlplik nie włącza się ON_ERROR_STOPu góry pliku.

Taye
źródło
21

Dowiedziałem się, jak to rozwiązać.

Muszę włączyć ON_ERROR_STOPu góry pliku.

Przykład:

\set ON_ERROR_STOP true
Jin Kim
źródło
+1 za obejrzenie strony podręcznika :)
serverhorror
+1 za najlepsze rozwiązanie, ponieważ pozwala mi ustawić zmienną w skrypcie, więc mogę ufać, że zawsze działa poprawnie i nie muszę się martwić o kontekst środowiska wykonawczego.
Brandon