Transações implícitas do PostgreSQL 9.0 não são revertidas

2

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?

    
por Stephen Touset 20.12.2012 / 01:40

1 resposta

1

Execute este comando no cliente psql:

\echo :AUTOCOMMIT

Se estiver "desligado", procure um arquivo .psqlrc que contenha "\ set AUTOCOMMIT off" ou "\ unset AUTOCOMMIT".

    
por 08.01.2013 / 21:04

Tags