以下使用非确定性函数的查询会产生两个相同的行 - CTE 被计算并重新使用。
WITH foo AS (SELECT uuid_generate_v4() AS id)
SELECT id FROM foo
UNION ALL
SELECT id FROM foo
| id
| 741f4f69-416b-4b4c-9226-559527f4a84e
| 741f4f69-416b-4b4c-9226-559527f4a84e
这个执行有保证吗?postgres 可以决定将它内联到
SELECT id FROM (SELECT uuid_generate_v4() AS id) t
UNION ALL
SELECT id FROM (SELECT uuid_generate_v4() AS id) t
| id
| 262f0006-b4d5-440a-a86a-d79cd2684458
| c24b5835-9c5c-4d6f-b649-8e510129015b
这会产生两个不同的 ID(因此会产生不同的结果)?
SQL 标准规定了什么?Postgres 是否提供任何额外的保证?如果不能保证,重用依赖于非确定性过程的语句的标准方法是什么?