Postgres upsert:区分新行和更新行

sum*_*mek 1 sql postgresql upsert

我正在考虑使用 PostgreSQLINSERT .. ON CONFLICT UPDATE功能。理想情况下,我将能够区分哪些行已成功插入,哪些行已更新。有没有办法做到这一点?

Erw*_*ter 6

有一种方法可以不向表中添加列:

CREATE TABLE tbl(id int PRIMARY KEY, col int);
INSERT INTO tbl VALUES (1, 1);
Run Code Online (Sandbox Code Playgroud)
INSERT INTO tbl(id, col)
VALUES (1,11), (2,22)
ON     CONFLICT (id) DO UPDATE
SET    col = EXCLUDED.col
RETURNING *, (xmax = 0) AS inserted;
Run Code Online (Sandbox Code Playgroud)

解释: