自动提交关闭,开始并警告正在进行的事务

Kje*_* S. 1 postgresql autocommit psql

我喜欢在我的~/.psqlrc

\set autocommit off
Run Code Online (Sandbox Code Playgroud)

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

BEGIN;
Run Code Online (Sandbox Code Playgroud)

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

但是,这会发出警告:

WARNING:  there is already a transaction in progress
Run Code Online (Sandbox Code Playgroud)

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

Lau*_*lbe 5

您的两个设置相互矛盾。

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

-- statement 1
-- statement 2
...
COMMIT;
-- statement 3
...
COMMIT;
Run Code Online (Sandbox Code Playgroud)

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

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

也许最好用

\set autocommit on
Run Code Online (Sandbox Code Playgroud)

以确保一切都是一致的。