Обнаружение ошибок, чтобы решить, откатить или зафиксировать - PullRequest
2 голосов
/ 02 октября 2009

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

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

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

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

1 Ответ

2 голосов
/ 02 октября 2009

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

\ set ON_ERROR_STOP

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...