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

标签 postgresql psql autocommit

我喜欢在我的 ~/.psqlrc 中包含这个:

\set autocommit off

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

BEGIN;

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

但是,这会发出警告:

WARNING:  there is already a transaction in progress

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

最佳答案

您的两个设置相互矛盾。

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

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

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

现在,如果您的脚本以 BEGIN 开头,这将导致两个 BEGIN 紧接在一起,这将导致观察到的警告。

也许最好用

开始你的脚本
\set autocommit on

确保一切一致。

关于postgresql - 自动提交关闭,开始并警告正在进行的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53528702/

相关文章:

postgresql - postgres regexp_replace 否定连续字符组的存在

php - MySQL 自动提交 - 插入被忽略

MySQL:使用自动提交锁定表与启动事务

postgresql - 如何在 psql 的命令行查询中转义单引号?

postgresql - 我应该如何修复此 PostgreSQL 安装?

connection-pooling - 在 HikariCP 中重置(自动提交)连接

postgresql - 将 lon/lat 集合转换为 geom/linestring

php - 使用 PHP 的 PDO 插入带有 HSTORE 的数组

sql - View 和索引对性能的影响

postgresql - echo 在运行时从文件中查询 psql