检查两个表在PostgreSQL中是否具有相同的内容

前端之家收集整理的这篇文章主要介绍了检查两个表在PostgreSQL中是否具有相同的内容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这已经是 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条款,但我认为这是一种更好的方法.

原文链接:https://www.f2er.com/postgresql/192252.html

猜你在找的Postgre SQL相关文章