检查两个表在PostgreSQL中是否具有相同的内容
发布时间:2020-12-13 16:20:24 所属栏目:百科 来源:网络整理
导读:这已经是 asked on Stack Overflow,但仅适用于MySQL.我正在使用PostgreSQL.不幸的是(并且令人惊讶地)PostgreSQL似乎没有像 CHECKSUM table 这样的东西. PostgreSQL解决方案没问题,但通用解决方案会更好.我找到了http://www.besttechtools.com/articles/artic
这已经是
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:
SELECT 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条款,但我认为这是一种更好的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |