【发布时间】:2019-12-07 13:57:05
【问题描述】:
我试图通过将行标记为已更新来使查询具有幂等性。但是,查询规范的一部分是返回与过滤器匹配的行的 ID。我正在考虑执行以下操作:
WITH
prev as (
SELECT id
FROM books
WHERE id = any($1::uuid[])
AND updated
),
updated as (
UPDATE books
SET author = $2 || author, updated = true
WHERE id = any($1::uuid[])
AND not updated
RETURNING id
)
SELECT id FROM prev
UNION ALL
SELECT id FROM updated
我希望避免使用UNION 而不是UNION ALL 来避免重复数据删除步骤,所以想知道运算符的语义是否保证第一个查询不会看到第二个查询的结果。
相关问题:
使用 CTE 进行更新 + 选择:
有副作用的函数的执行顺序:Does postgres union guarantee order of execution when invoking functions with side effects?
【问题讨论】:
标签: postgresql sql-update union-all