postgresql - 自动提交关闭,BEGIN 并警告正在进行中的事务
问题描述
我喜欢在我的~/.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;
那是因为自动提交模式会BEGIN
在第一个语句之前和每个语句之前自动添加一个COMMIT
or ROLLBACK
。那是因为 PostgreSQL 没有自动提交模式,所以psql
“伪造它”。
现在,如果您的脚本以 a 开头BEGIN
,这将导致两个BEGIN
s 紧随其后,这将导致观察到的警告。
也许最好从你的脚本开始
\set autocommit on
以确保一切都是一致的。
推荐阅读
- android - MvvmCross - 卡在启动画面中
- jprofiler - JProfiler中的Net IO是什么意思?
- javascript - 如何获取特定x,y周围的所有坐标
- c++ - 如何使用 clang 禁用格式安全错误?
- java - 单击按钮启动新活动时,我的应用程序崩溃
- php - 有没有一种方法可以在没有数据库的情况下将 HTML 页面链接在一起并在它们之间共享信息?
- c# - C#: Udp socket and receivefrom() method
- c - Segmentation fault while mallocing 2d arrays?
- external - 使用 Xcode 10 为 LiveCode 9.01 构建 C/C++ 外部
- css - 更改 Bootstrap 4 复选框按钮的开/关颜色