使用 Postgresql 使用更改/增量

Consume The Changes / Deltas using Postgresql

以下是我的场景:

我有 2 个着陆点 tables source_table 和 destination_table。

我需要一个 query/queries,它将使用新行以及来自源 table 的更新行更新目标 table。

示例数据为:

source table:
id    name    salary
1     P1      10000
2     P2      20000

target table:
id    name    salary
1     P1      8000

预期的输出应该是:

target table:
id    name    salary
1     P1      10000 (salary updated)
2     P2      20000 (new row inserted)

这似乎不起作用:

select * from user_source 
except 
select * from user_target as s

INSERT INTO user_target (id, name, salary) 
VALUES (s.id, s.name, s.salary) WHERE id !=s.id

UPDATE user_target 
  SET name=s.name, salary=s.salary,
WHERE id = s.id

对我来说似乎很简单 insert ... on conflict:

insert into target_table (id, name, salary)
select id, name, salary 
from source_table
on conflict (id) do update 
  set name = excluded.name, 
      salary = excluded.salary;

这假定 id 列是主(或唯一)键。查看示例数据 (id, name) 可能也是独一无二的。在这种情况下,您需要更改 on conflict() 子句并显然也删除名称列的更新。