自动提交,开始并警告正在进行的交易

时间:2018-11-28 21:53:57

标签: postgresql psql autocommit

我喜欢在我的~/.psqlrc中使用它:

\set autocommit off

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

BEGIN;

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

但是,这会发出警告:

WARNING:  there is already a transaction in progress

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

1 个答案:

答案 0 :(得分:2)

您的两个设置相互矛盾。

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

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

这是因为自动提交模式将在第一个语句之前自动添加一个BEGIN,在COMMITROLLBACK之后的每个语句之前自动添加一个psql。 那是因为PostgreSQL没有自动提交模式,所以BEGIN在“伪造”它。

现在,如果您的脚本以BEGIN开头,则将彼此紧接着出现两个\set autocommit on ,这将导致观察到的警告。

也许最好以以下方式启动脚本

href

确保所有内容都是一致的。