小编Jos*_*osh的帖子

想要在 Postgres 中使用 CTE 删除然后插入单个语句

我想使用 Postgres 中的 CTE 删除然后插入单个语句。我们可以使用显式事务和 2 个语句,但希望尽可能避免这种情况。我不知道是否会删除 0 行或 1+ 行,因此我认为我无法使用单个 WHERE EXISTS 或 WHERE NOT EXISTS 来确保 CTE 中的删除语句首先运行。这与我的设想类似:

WITH deletions AS (
   DELETE FROM foo WHERE a = 'abc' and b = 2 
)
INSERT INTO FOO (a, b, c) VALUES ('abc', 2, 'new value')
Run Code Online (Sandbox Code Playgroud)

但我需要一种方法来强制 CTE 首先运行。表上不存在会在同一事务中尝试两次更新同一记录时产生问题的 pk。

postgresql cte

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

cte ×1

postgresql ×1