Подтвердить что ты не робот

Ошибка Postgres sql при ошибке script

Есть ли способ указать, что при выполнении sql script он останавливается при первой ошибке в script, он обычно продолжается, независимо от предыдущих ошибок.

Спасибо

4b9b3361

Ответ 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;, он фактически пропустит все после первой ошибки, а затем отбросит все, что он сделал до ошибки.