在 PostgreSQL 9.5 中,给定一个使用以下方法创建的简单表:
create table tbl (
id serial primary key,
val integer
);
Run Code Online (Sandbox Code Playgroud)
我运行 SQL 来插入一个值,然后在同一个语句中更新它:
WITH newval AS (
INSERT INTO tbl(val) VALUES (1) RETURNING id
) UPDATE tbl SET val=2 FROM newval WHERE tbl.id=newval.id;
Run Code Online (Sandbox Code Playgroud)
结果是 UPDATE 被忽略:
testdb=> select * from tbl;
????????????
? id ? val ?
????????????
? 1 ? 1 ?
????????????
Run Code Online (Sandbox Code Playgroud)
为什么是这样?这个限制是 SQL 标准的一部分(即存在于其他数据库中),还是特定于 PostgreSQL 可能在未来修复的部分?在使用查询文件说,多次更新不支持,但没有提到INSERT和UPDATE。