Обнаружение ошибок для принятия решения об откате или фиксации

Я пытаюсь быть максимально ленивым, генерируя серию команд SQL в файле, чтобы передать его psql для обработки. Короче говоря, я загружаю серию таблиц импорта из внешних источников (уже сделано через COPY), а затем, на последнем этапе, удаляю/обновляю/вставляю записи в первичные таблицы (что функционально также выполняется).

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

Итак, есть ли способ узнать из скрипта, обработанного psql, если произошла ошибка, и выполнить откат? И если ошибок не было, коммитить.

Я всегда могу решить проблему, переключившись на язык более высокого уровня, открыв соединение и запустив каждый оператор и проверив наличие ошибок, но это всего лишь дополнительный код, которого я хотел бы избежать, если это возможно.


person dland    schedule 02.10.2009    source источник


Ответы (1)


Если вы используете psql, не могли бы вы использовать параметр командной строки -1 и запустить свой файл с помощью:

\установить ON_ERROR_STOP

Это должно обернуть весь сеанс в транзакцию и немедленно выйти из строя при обнаружении ошибки.

person Community    schedule 02.10.2009
comment
эээ... это должно быть: \set ON_ERROR_STOP не знаю, откуда взялись лишние *. - person ; 02.10.2009