这已经是
asked on Stack Overflow,但仅适用于MysqL.我正在使用Postgresql.不幸的是(并且令人惊讶地)Postgresql似乎没有像
CHECKSUM table
这样的东西.
Postgresql解决方案没问题,但通用解决方案会更好.我找到了http://www.besttechtools.com/articles/article/sql-query-to-check-two-tables-have-identical-data,但我不明白使用的逻辑.
一种选择是使用以下形式在两个表之间使用FULL OUTER JOIN:
原文链接:https://www.f2er.com/postgresql/192252.htmlSELECT count (1) FROM table_a a FULL OUTER JOIN table_b b USING (<list of columns to compare>) WHERE a.id IS NULL OR b.id IS NULL ;
例如:
CREATE TABLE a (id int,val text); INSERT INTO a VALUES (1,'foo'),(2,'bar'); CREATE TABLE b (id int,val text); INSERT INTO b VALUES (1,(3,'bar'); SELECT count (1) FROM a FULL OUTER JOIN b USING (id,val) WHERE a.id IS NULL OR b.id IS NULL ;
将返回2的计数,而:
CREATE TABLE a (id int,val) WHERE a.id IS NULL OR b.id IS NULL ;
返回希望的计数为0.
我喜欢这种方法的方法是它只需要读取每个表一次,而不是在使用EXISTS时读取每个表两次.此外,这适用于任何支持完全外连接的数据库(不仅仅是Postgresql).
我一般不鼓励使用USING条款,但我认为这是一种更好的方法.