Ошибка Postgres sql при ошибке script
Есть ли способ указать, что при выполнении sql script он останавливается при первой ошибке в script, он обычно продолжается, независимо от предыдущих ошибок.
Спасибо
Ответы
Ответ 1
Я думаю, что решение добавить следующее в .psqlrc далека от совершенства
\set ON_ERROR_STOP on
существует гораздо более простой и удобный способ - используйте psql с параметром:
psql -v ON_ERROR_STOP=1
лучше использовать параметр -X
, отключая использование файла .psqlrc.
Отлично работает для меня
p.s. решение найдено в большом посте от Питера Эйзентраута. Спасибо, Питер!
http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
Ответ 2
Я предполагаю, что вы используете psql
, это может быть удобно добавить в ваш файл ~/.psqlrc
.
\set ON_ERROR_STOP on
Это приведет к прерванию первой ошибки. Если у вас его нет, даже с транзакцией он продолжит выполнение вашего script, но не сработает до конца вашего script.
И вы, вероятно, захотите использовать транзакцию, как сказал Пол. Что также можно сделать с помощью psql --single-transaction ...
, если вы не хотите изменять script.
Итак, полный пример: с ON_ERROR_STOP в вашем .psqlrc:
psql --single-transaction --file /your/script.sql
Ответ 3
Это не совсем то, что вы хотите, но если вы начнете свой script с begin transaction;
и закончите с end transaction;
, он фактически пропустит все после первой ошибки, а затем отбросит все, что он сделал до ошибки.