postgres:INSERT in with子句不返回任何行?

时间:2017-10-12 18:17:56

标签: postgresql

运行postgres 10,以下代码返回0行:

drop table if exists foo;
create table foo(t text);
with x as (
  insert into foo values ('t') returning 't' as t)
select foo.* from foo join x on foo.t = x.t;

我希望它会返回1行。有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:1)

foo为空,因为当(整个)命令完成时,插入的行将可见。

请参阅the documentation(以及以下示例)中的此声明:

  

WITH中的子语句彼此同时并与主查询一起执行。因此,在WITH中使用数据修改语句时,指定更新实际发生的顺序是不可预测的。所有语句都使用相同的快照执行(参见第13章),因此它们无法“看到”彼此对目标表的影响。

相关问题