Есть ли способ указать, что при выполнении сценария sql он останавливается при обнаружении первой ошибки в сценарии, он обычно продолжается, независимо от предыдущих ошибок.
postgresql
Рэй
источник
источник
-v ON_ERROR_STOP=ON
тоже работает, по крайней мере, с 9.2. Я подозреваю , что допустимы любые варианты логического "истина" .Я предполагаю, что вы используете
psql
, это может быть удобно для добавления в ваш~/.psqlrc
файл.Это приведет к прерыванию работы при первой ошибке. Если у вас его нет, даже с транзакцией он продолжит выполнение вашего скрипта, но не сможет выполнить все до конца вашего скрипта.
И вы, вероятно, захотите использовать транзакцию, как сказал Пол. Что также можно сделать,
psql --single-transaction ...
если вы не хотите изменять сценарий.Итак, полный пример с ON_ERROR_STOP в вашем .psqlrc:
источник
--single-transaction
используется,-v ON_ERROR_STOP=1
все равно необходимо для ненулевого статуса существованияЭто не совсем то, что вы хотите, но если вы начнете свой скрипт с
begin transaction;
и закончитеend transaction;
, он фактически пропустит все после первой ошибки, а затем откатит все, что он делал до ошибки.источник
Я всегда люблю напрямую обращаться к руководству.
Из руководства PostgreSQL :
По умолчанию, если код sql, который вы запускаете на сервере PostgreSQL, ошибается, psql не выдает ошибку. Он перехватит ошибку и продолжит работу. Если, как упоминалось выше, вы установите для этого
ON_ERROR_STOP
параметра значение on, когда psql обнаружит ошибку в коде sql, он выйдет и вернется3
в оболочку.источник