鉴于:
$psql -U postgres
Password for user postgres:
psql (12.1, server 9.6.2)
postgres=# \d foo
Table "public.foo"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
a | integer | | |
然后我跑了:
postgres=# select count(*) from foo;
count
-------
0
(1 row)
postgres=# insert into foo (a) values (1) returning (select count(*) from foo);
count
-------
0
(1 row)
INSERT 0 1
为什么它返回0
而不是1
,即因为我插入了一行?
在插入之前
select count(*) from foo
计算返回子句内部,然后在返回子句中将其视为常量,如下所示:explain
文档证实了这一点,它说返回子句可能包含要返回的列名或值表达式(使用这些列)(在插入后保存查询):