首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UNION UNION用于更新/返回+选择?

UNION UNION用于更新/返回+选择?
EN

Stack Overflow用户
提问于 2019-12-07 13:57:05
回答 1查看 667关注 0票数 0

我正试图通过将行标记为已更新来转换查询幂等项。但是,查询规范的一部分是返回与筛选器匹配的行is。我想做的事情如下:

代码语言:javascript
复制
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

我希望避免de dupe步骤使用UNION而不是UNION ALL,所以我想知道操作符的语义是否保证第一个查询不会看到第二个查询的结果。

相关Qs

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-07 13:57:05

PostgreSQL WITH 文档指定两个CTE将在相同的快照中并发执行,因此使用UNION ALL是安全的。

WITH中的子语句是与其他并发执行的,与主查询并行执行。因此,当使用WITH的数据修改语句时,指定的更新实际发生的顺序是不可预测的。所有语句都是用相同的快照执行的(参见第13章),因此它们不能“看到”对方对目标表的影响。这减轻了行更新的实际顺序的不可预测性的影响,并意味着返回数据是在不同的子语句和主查询之间通信更改的唯一方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59226724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档