我在生产中使用了PostgreSQL 9.0,并开始注意到声明错误放弃了一个永远不会回滚的隐式事务。 同样的问题不会出现在我的开发箱,这是在9.2。 我不确定这是一个错误,function还是configuration参数。
这是一个问题的例子:
$ 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的本地开发实例上进行显式回滚。
我唯一能够在网上find的相关信息表明,这是AUTOCOMMIT off的结果,但在两种环境中都设置了。
那这是什么? 一个错误? configuration错误? 我该如何解决?
在psql客户端运行这个命令:
\echo :AUTOCOMMIT
如果显示“off”,则查找包含“\ set AUTOCOMMIT off”或“\ unset AUTOCOMMIT”的.psqlrc文件。