Execute este comando no cliente psql:
\echo :AUTOCOMMIT
Se estiver "desligado", procure um arquivo .psqlrc que contenha "\ set AUTOCOMMIT off" ou "\ unset AUTOCOMMIT".
Estou usando o PostgreSQL 9.0 em produção e comecei a perceber que os erros de instrução abortam uma transação implícita que nunca é revertida. Esse mesmo problema não aparece na minha caixa de desenvolvimento, que está em 9.2. Não tenho certeza se é um bug, recurso ou parâmetro de configuração neste momento.
Veja um exemplo do problema:
$ 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
Claro, eu não tenho uma transação para começar. Eu percebo que o PostgreSQL envolve todas as instruções em uma transação implícita de uma única instrução, mas na minha experiência nunca precise ser revertida quando houver um erro. Eu não preciso de uma reversão explícita na minha instância de desenvolvimento local do PostgreSQL.
A única informação relevante que consegui encontrar on-line indica que é um resultado de AUTOCOMMIT
sendo off
, mas está definido como on
em ambos os ambientes.
Então o que é isso? Um inseto? Uma configuração incorreta? Como resolvo isso?
Tags postgresql