Как автоматически откатить транзакцию в интерактивном режиме psql? - PullRequest
0 голосов
/ 21 апреля 2020

Давайте предположим следующее содержимое файла erroneous-query.sql:

BEGIN;
SELECT 1/0;
COMMIT;

Когда я говорю \i erroneous-query.sql в интерактивном режиме psql, я получаю следующее:

BEGIN
psql:erroneous-query.sql:2: ERROR:  division by zero

но мне нужно сказать ROLLBACK; вручную - в противном случае транзакция зависает (и блокирует все остальное).

Как настроить psql для автоматического отката этой транзакции для меня? Я пытался \set ON_ERROR_ROLLBACK off, но безрезультатно.

1 Ответ

1 голос
/ 21 апреля 2020

Невозможно заставить psql автоматически выдавать ROLLBACK.

Но прерванная транзакция (транзакция с ошибкой и без точек сохранения) немедленно снимет все блокировки, поэтому никогда не блокируйте кого-либо еще.

Остальные операторы в транзакции будут выполнены очень быстро, каждое из них вызовет

ERROR:  current transaction is aborted, commands ignored until end of transaction block

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

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