获取在 Postgres UPSERT 查询期间更改的信息

Get information what has changed during Postgres UPSERT query

在 PostgreSQL 上的 UPSERT 查询期间,table 的哪些条目已更改(插入或更新)并不明显。

查询:

首先为businessKey添加唯一约束:

alter table public."test_table" add constraint "bk_constraint" unique ("businessKey");

插入 ... 发生冲突 ... 进行更新

INSERT INTO public."test_table" ("first_name","last_name","role", "businessKey") 
SELECT 
UNNEST(ARRAY['Jon','Anna','Bernhard']),
UNNEST(ARRAY['Doe','Miller','Hill']),
UNNEST(ARRAY['team member','team member','project lead']),
UNNEST(ARRAY['Jon JD','Anna AM','Bernhard AH'])
ON CONFLICT ("businessKey") DO UPDATE 
SET "first_name"=EXCLUDED."first_name","last_name"=EXCLUDED."last_name""role"=EXCLUDED."role","businessKey"=EXCLUDED."businessKey";

现在我想知道插入或更新了哪些条目以供进一步处理。我怎样才能得到这些信息?

只需添加一条更新语句来记录此信息:

...
ON CONFLICT ("businessKey") DO UPDATE 
SET is_updated = true,  
 "first_name"=EXCLUDED."first_name",
 "last_name"=EXCLUDED."last_name"...