Luc*_*ssi 3 database postgresql transactions insert atomic
我想知道PostgreSQL多行INSERT是否安全(插入所有数据或在系统/数据库发生故障时不插入数据).查询示例:
INSERT INTO "tests" ("name") VALUES ('1'), ('2')
Run Code Online (Sandbox Code Playgroud)
你自己的答案(现已删除)是错误解释的东西.单个INSERT语句总是原子的.你的INSERT两行示例是全部或全部 - 两行都插入或没有.
是否启用自动提交取决于您的客户端.
在psql中,默认情况下启用自动提交.所有这些意味着每个语句都作为自己的事务运行,除非您将(任意数量的)语句包装到显式事务包装器中.所以这是"全有或全无":
INSERT INTO test (name) VALUES ('1'), ('2');
Run Code Online (Sandbox Code Playgroud)
像这样:
BEGIN;
INSERT INTO test (name) VALUES ('1');
INSERT INTO test (name) VALUES ('2');
COMMIT;
Run Code Online (Sandbox Code Playgroud)
但不是这个:
INSERT INTO test (name) VALUES ('1');
INSERT INTO test (name) VALUES ('2');
Run Code Online (Sandbox Code Playgroud)
在pgAdmin中,您从查询窗口立即发送的所有内容都默认包含在事务中.
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |