PostgreSQL 9.0 隐式事务不回滚

PostgreSQL 9.0 隐式事务不回滚

我在生产环境中使用 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

那么这是什么? 一个错误? 一个错误配置? 我该如何解决它?

答案1

在 psql 客户端中运行此命令:

\echo :AUTOCOMMIT

如果显示“off”,则查找包含“\set AUTOCOMMIT off”或“\unset AUTOCOMMIT”的 .psqlrc 文件。

相关内容