Postgresql Postgres DB中两个表之间的更改/增量

Postgresql Postgres DB中两个表之间的更改/增量,postgresql,Postgresql,我有一个场景,我想在两个postgres表之间找到delta。假设有表A和表B。我想查找表A中新添加的记录,然后我需要查找表A中更新的记录,然后查找表A中相对于表B删除的记录 当我以后需要根据更新/删除/插入标志处理这些内容时,最好的方法是什么。您可以执行完整的外部联接: select id, case when s.id is null then 'Deleted in source table' when t.id is null then

我有一个场景,我想在两个postgres表之间找到delta。假设有表A和表B。我想查找表A中新添加的记录,然后我需要查找表A中更新的记录,然后查找表A中相对于表B删除的记录


当我以后需要根据更新/删除/插入标志处理这些内容时,最好的方法是什么。

您可以执行完整的外部联接:

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的唯一列

其中s不同于t将比较两个表中的所有列,从而过滤掉两个表中存在的所有相同行。因此,结果是其中一个表中缺少行或具有不同的值


在线示例:

这些表是否有一个共同的唯一列?是的,两个表是相同的。我还需要一个标志来检查哪些是新添加的行,哪些是更新的行,哪些是从表a中删除的行。@abhijeetsaai:这是状态列。我将示例更改为使用您的单词hanks作为响应。它正在工作。在我的表中,所有字段都是相同的,通过运行此查询,我们在结果集中得到了重复的列。删除这些表并获得与表A相同的列结构的任何方法,因为这两个表是相同的。我不担心表B的数据。我只想获取表A数据。@abhijeetsaai:只需从所需的表中显式选择它们。不要使用选择*