Postgres DB中两个表格之间的变化/ Deltas

Postgres DB中两个表格之间的变化/ Deltas

问题描述:

我有一个场景,我想在两个postgres表格之间找到增量。假设有表A和表B,我想查找表A中新添加的记录,那么我需要在表A中找到更新的记录,然后查找表A中相对于表B删除的记录。Postgres DB中两个表格之间的变化/ Deltas

什么是最好的办法,因为我需要稍后处理那些基于更新/删除/插入标志。

+0

那些表具有共同的唯一列吗? –

+0

是的两个表都是相同的。 – AB90

你可以做一个完全外部联接:

select id, 
     case 
     when s.id is null then 'Deleted in source table' 
     when t.id is null then 'Added in source table' 
     else 'Data Changed' 
     end as status 
from source s 
    full outer join target t using (id) 
where s is distinct from t; 

这假定两个表唯一列名为id

where s is distinct from t将比较两个表中的所有列,因此会过滤出两者中存在且相同的所有行。所以结果是在一个表中缺少的行或者具有不同的值。

在线示例:http://rextester.com/LKY13449

+0

我也想要一个标志来检查哪些是新添加的行,哪些是更新的或哪些从表A中删除。 – AB90

+0

@AbhijeetSahai:这是'status'列。我改变例子来使用你的话 –

+0

感谢您的回应。这是工作。在我的表中,所有的字段都是相同的,通过运行这个查询我们得到了结果集中的重复列。任何方式删除这些并获得像表A一样的列结构,因为两个表都是相同的。我对表B数据不感兴趣。我只想得到表格A的数据。 – AB90