Я использую PostgreSQL 9.0 в производстве и начал замечать, что ошибки операторов прерывают неявную транзакцию, которая никогда не откатывается. Эта же проблема не появляется в моем окне разработки, которое находится на 9.2. Я не уверен, что это ошибка, функция или параметр конфигурации на данный момент.
Вот пример проблемы:
$ psql test
test=> SELECT foo;
ERROR: column "foo" does not exist
LINE 1: select foo;
^
test=> SELECT VERSION()
ERROR: current transaction is aborted, commands ignored until end of transaction block
Конечно, для начала у меня нет транзакции. Я понимаю, что PostgreSQL оборачивает все операторы в неявную транзакцию с одним оператором, но по моему опыту никогда не нужно откатывать назад при возникновении ошибки. Мне не требуется явный откат моего локального экземпляра PostgreSQL для разработки.
Единственная соответствующая информация, которую мне удалось найти в Интернете, указывает на то, что это результат AUTOCOMMIT
будучи off
, но он установлен на on
в обеих средах.
и что это? Жук? Неправильная конфигурация? Как решить эту проблему?
Выполните эту команду в клиенте psql:
\echo :AUTOCOMMIT
Если указано «выключено», найдите файл .psqlrc, содержащий либо «\ set AUTOCOMMIT off», либо «\ unset AUTOCOMMIT».