如何使用 PostgreSQL 执行 MERGE(插入/更新/删除)?

ele*_*ype 6 sql postgresql

我正在使用INSERT ... ON CONFLICT ...能够在 PostgreSQL 表中插入一些数据。

但是现在我还希望能够删除一些现有的行,如果它们不是由当前INSERT查询提供的。所以,除了INSERTand 之外UPDATE,我希望能够做一个DELETE.

使用SQL Server,我会使用MERGE查询和:

WHEN NOT MATCHED BY SOURCE THEN DELETE
Run Code Online (Sandbox Code Playgroud)

使用 实现类似功能的推荐方法是什么PostgreSQL

我宁愿不要运行两个单独的查询。

Tho*_*ger 5

您可以为此使用 CTE

WITH updated AS (
INSERT ... 
INTO tbl 
ON CONFLICT ...
RETURNING your_primary_key
)
DELETE FROM tbl t 
WHERE your_primary_key NOT IN ( 
  SELECT updated.your_primary_key FROM updated
);
Run Code Online (Sandbox Code Playgroud)