Название этой psql-переменной подсказывает, что если ее установить, то ошибочная команда будет приводить к откату транзакции: при ошибке - откат.
Как-то так:
postgres=# begin;
BEGIN
postgres=# select1+1;
ERROR: syntax error at or near "select1"
LINE 1: select1+1;
^
postgres=# commit;
ROLLBACK
Такое поведение psql сильно раздражает. Из-за любой случайной ошибки при наборе команды приходится терять всю транзакцию.
Только вот переменная ON_ERROR_ROLLBACK не виновница, а наоборот, призвана помочь в таких ситуациях.
postgres=# \set ON_ERROR_ROLLBACK ON
postgres=# begin;
BEGIN
postgres=# select1+1;
ERROR: syntax error at or near "select1"
LINE 1: select1+1;
^
postgres=# commit;
COMMIT
Если переменная установлена, а по умолчанию это не так, то psql перед выполнением каждой команды неявно устанавливает точку сохранения и при ошибке откатывается к ней. Что позволяет продолжить основную транзакцию.
Можно установить значение переменной в INTERACTIVE, тогда такое поведение будет распространяться только на сеансы интерактивной работы, что собственно и нужно.
Строка \set ON_ERROR_ROLLBACK INTERACTIVE определенно заслуживает место в .psqlrc
Как-то так:
postgres=# begin;
BEGIN
postgres=# select1+1;
ERROR: syntax error at or near "select1"
LINE 1: select1+1;
^
postgres=# commit;
ROLLBACK
Такое поведение psql сильно раздражает. Из-за любой случайной ошибки при наборе команды приходится терять всю транзакцию.
Только вот переменная ON_ERROR_ROLLBACK не виновница, а наоборот, призвана помочь в таких ситуациях.
postgres=# \set ON_ERROR_ROLLBACK ON
postgres=# begin;
BEGIN
postgres=# select1+1;
ERROR: syntax error at or near "select1"
LINE 1: select1+1;
^
postgres=# commit;
COMMIT
Если переменная установлена, а по умолчанию это не так, то psql перед выполнением каждой команды неявно устанавливает точку сохранения и при ошибке откатывается к ней. Что позволяет продолжить основную транзакцию.
Можно установить значение переменной в INTERACTIVE, тогда такое поведение будет распространяться только на сеансы интерактивной работы, что собственно и нужно.
Строка \set ON_ERROR_ROLLBACK INTERACTIVE определенно заслуживает место в .psqlrc
Комментариев нет:
Отправить комментарий