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.

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.


21

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

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

Przykład:

\set ON_ERROR_STOP true

+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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.