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