Есть ли способ указать, что при выполнении sql script он останавливается при первой ошибке в script, он обычно продолжается, независимо от предыдущих ошибок.
Спасибо
Ответ 1
Я думаю, что решение добавить следующее в .psqlrc далека от совершенства
\set ON_ERROR_STOP on
существует гораздо более простой и удобный способ - используйте psql с параметром:
psql -v ON_ERROR_STOP=1
лучше использовать параметр -X, отключая использование файла .psqlrc.
Отлично работает для меня
Я предполагаю, что вы используете 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;, он фактически пропустит все после первой ошибки, а затем отбросит все, что он сделал до ошибки.