PostgreSQL多行插入是全部还是全部?

Luc*_*ssi 3 database postgresql transactions insert atomic

我想知道PostgreSQL多行INSERT是否安全(插入所有数据或在系统/数据库发生故障时不插入数据).查询示例:

INSERT INTO "tests" ("name") VALUES ('1'), ('2')
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 7

你自己的答案(现已删除)是错误解释的东西.单个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中,您从查询窗口立即发送的所有内容都默认包含在事务中.