我喜欢在我的~/.psqlrc
中使用它:
\set autocommit off
在filename.sql
脚本的顶部,我也喜欢这样:
BEGIN;
...如果这些脚本由使用自动提交的其他人运行。
但是,这会发出警告:
WARNING: there is already a transaction in progress
如何关闭那些烦人的警告?有某种BEGIN IF NOT ALREADY BEGUN
命令吗?
答案 0 :(得分:2)
您的两个设置相互矛盾。
如果您在psql
中启用了自动提交模式,则脚本应如下所示:
-- statement 1
-- statement 2
...
COMMIT;
-- statement 3
...
COMMIT;
这是因为自动提交模式将在第一个语句之前自动添加一个BEGIN
,在COMMIT
或ROLLBACK
之后的每个语句之前自动添加一个psql
。
那是因为PostgreSQL没有自动提交模式,所以BEGIN
在“伪造”它。
现在,如果您的脚本以BEGIN
开头,则将彼此紧接着出现两个\set autocommit on
,这将导致观察到的警告。
也许最好以以下方式启动脚本
href
确保所有内容都是一致的。