首页 > 解决方案 > 自动提交关闭,BEGIN 并警告正在进行中的事务

问题描述

我喜欢在我的~/.psqlrc

\set autocommit off

filename.sql我也喜欢在我的脚本顶部这样:

BEGIN;

...如果这些脚本由使用自动提交的其他人运行。

但是,这会发出警告:

WARNING:  there is already a transaction in progress

如何关闭那些烦人的警告?有什么BEGIN IF NOT ALREADY BEGUN命令吗?

标签: postgresqlpsqlautocommit

解决方案


您的两个设置相互矛盾。

如果您在 中启用自动提交模式psql,您的脚本应如下所示:

-- statement 1
-- statement 2
...
COMMIT;
-- statement 3
...
COMMIT;

那是因为自动提交模式会BEGIN在第一个语句之前和每个语句之前自动添加一个COMMITor ROLLBACK。那是因为 PostgreSQL 没有自动提交模式,所以psql“伪造它”。

现在,如果您的脚本以 a 开头BEGIN,这将导致两个BEGINs 紧随其后,这将导致观察到的警告。

也许最好从你的脚本开始

\set autocommit on

以确保一切都是一致的。


推荐阅读