如何在PostgreSQL数据库中按内容查找所有相同的表?

时间:2018-01-30 13:36:08

标签: sql database postgresql

我有一个庞大的PostgreSQL数据库,它可能有几个具有相同内容的表(相同的排序),但名称可能不同。表列名称相同。通过运行新查询,可以在更新期间创建具有相同内容的表。数据库包含大约600个表。

我想问有没有办法自动找出内容相同的表名

按表模式搜索不适合,因为所有表都具有相同的表模式。我正在使用PostgreSQL 10.
我一直在寻找解决方案,但仍然没有结果。也许有人尝试过类似的东西。

2 个答案:

答案 0 :(得分:1)

你可以将每个表复制到csvs,没有标题,相同的分隔符。尽管有表/列名称,但具有相同大小(或散列)的csv文件将告诉您确切的内容......

假设我有这两个表:

$gte: ISODate("2017-10-08T00:57:06.563+0000")

所以我这样做:

o=# create table t1 (i int, t text);
CREATE TABLE
o=# insert into t1 select g,chr(g) from generate_series(1,999) g;
INSERT 0 999
o=# create table t2 (e int, p text);
CREATE TABLE
o=# insert into t2 select * from t1;
INSERT 0 999

我检查:

do $$
declare _r record;
begin
 for _r in (select relname::regclass from pg_class where relname like 't%' and relkind = 'r') loop
   execute format($f$copy %I to '/tmp/%I'$f$,_r.relname, _r.relname);
 end loop;
end;
$$;

对我来说t1和t2是相同的(上面的loo)和tb1与tb2(令人惊讶的)

答案 1 :(得分:0)

只是一个想法。

检查每个表的第N行的哈希值是否相同。

然后对于找到的表,对许多不同的随机行进行相同的检查。

首先检查最后一个ID是否匹配。