加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

检查两个表在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条款,但我认为这是一种更好的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读