Postgres: ненулевой код завершения при выполнении файла sql?

34

Я пишу сценарий оболочки, который делает вызовы psql, используя 2 формы ... одна по команде (-c), другая по файлу (-f).

например, psql -c "создать таблицу foo (целое число в строке)"

psql -f foobar.sql

Одно из различий между этими формами состоит в том, что вызов по команде (-c) возвращает ненулевой код выхода, если обнаружена ошибка, в то время как вызов по файлу (-f) всегда возвращает ноль.

Мне интересно, есть ли обходной путь для этого поведения? (т.е. вернуть ненулевое значение, если при выполнении файла произошла ошибка).

Спасибо.

Джин Ким
источник

Ответы:

37

Вы можете использовать ниже заявление.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Это вернет правильный код возврата, даже если foobar.sqlфайл не включен ON_ERROR_STOPв верхней части файла.

Тайе
источник
21

Я узнал, как решить эту проблему.

Мне нужно включить ON_ERROR_STOPв верхней части файла.

Пример:

\set ON_ERROR_STOP true
Джин Ким
источник
+1 за просмотр man-
страницы
+1 за лучшее решение, потому что оно позволяет мне установить переменную в скрипте, поэтому я могу доверять, что она всегда работает правильно и не должна беспокоиться о контексте времени выполнения.
Брэндон