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命令吗?
您的两个设置相互矛盾。
如果您在 中启用自动提交模式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)
以确保一切都是一致的。
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |