我想知道PostgreSQL多行INSERT
是否安全(插入所有数据或在系统/数据库发生故障时不插入数据)。查询示例:
INSERT INTO "tests" ("name") VALUES ('1'), ('2')
答案 0 :(得分:7)
您自己的答案(现已删除)是错误解释的事情。单个INSERT
语句 始终为原子 。您的示例INSERT
有两行全部或全部 - 两行都插入或没有。
是否启用自动提交取决于您的客户。
在 psql 默认情况下启用自动提交。所有这些意味着每个语句都作为自己的事务运行,除非您将(任意数量)语句包装到显式事务包装器中。所以这是“全有或全无”:
INSERT INTO test (name) VALUES ('1'), ('2');
就像这样:
BEGIN;
INSERT INTO test (name) VALUES ('1');
INSERT INTO test (name) VALUES ('2');
COMMIT;
但不是这样:
INSERT INTO test (name) VALUES ('1');
INSERT INTO test (name) VALUES ('2');
在 pgAdmin 中,您默认将从查询窗口发送的所有内容都包装到事务中。