使用 EXCEPT 并标记列差异

Using EXCEPT and flagging column differences

我想要做的是 select 来自 postgres table 的数据,它不会出现在另一个中。两个 table 都有相同的列,禁止在 Varchar(1) 上使用布尔值,但问题是这些列中的数据不匹配。

我知道我可以用 SELECT EXCEPT SELECT 语句来做到这一点,我已经实现并且正在运行。

我想做的是找到一种方法来标记不匹配的列。作为一个想法,我想在不匹配的字段中的数据末尾附加一个字符。

例如,如果一个 table 的 updateflag 与另一个不同,我将返回 '* f' 而不是 'f'

SELECT id, number, "updateflag" from dbc.person
EXCEPT
SELECT id, number, "updateflag":bool from dbg.person;

我是否应该将两个 table 连接在一起,post 执行此语句以识别返回的差异?

我已经尝试研究实现这个的方法,但没有找到任何关于这个主题的东西

为此我更喜欢完全外部联接

select *
from dbc.person p1
  full join dbg.person p2 on p1.id = p2.id
where p1 is distinct from p2;

id列被假定为"links"两个表在一起的主键列。

这只会 return 行,其中至少一列不同。

如果您想查看差异,可以使用 hstore 功能

select hstore(p1) - hstore(p2) as columns_diff_p1, 
       hstore(p2) - hstore(p1) as columns_diff_p2
from dbc.person p1
  full join dbg.person p2 on p1.id = p2.id
where p1 is distinct from p2;