设为主页 销售咨询 客服电话  
   
 
 
 
 
获取两个数据库间同结构的表数据差异postgre
2018-02-01

        问题描述:在为客户修复数据的时候,要把所有表里的数据一一比对主键值,获取差异。初始的做法是从数据库A里把表table1的数据逐个取出来(select key1,key2 from table1),然后把结果的key1key2拿到数据库里对应的表table1里进行查询,若无结果,说明不存在,记录该记录。

        从思路上没有错,但是效能太差。客户资料若是少还好说,但是如果表的资料上了10万笔以上就会出现失去响应。

        解决办法:使用dblink把数据库B的资料拓展到数据库A

        drop view IF EXISTS remote_tbsslipx;

        CREATE VIEW remote_tbsslipx AS SELECT * FROM dblink('host=38.49.32.78 port=5432 dbname=cao50001 user=postgres password=111111','SELECT        sslipno,skind From tbsslipx') AS t(sslipno varchar(17),skind varchar(4))//在数据库A里通过dblink建立数据库B数据的view select sslipno from remote_tbsslipx where skind='1' except select sslipno from tbsslipx where skind='1'//在数据库A用相关表进行了2次比较获取结果,这里用了exceptEXCEPT 从左查询中返回右查询没有找到的所有非重复值。

       经这样修改后,16万笔数据进行1分钟不到就查询出结果。

   
 
   
 
安徽鸿奥软件有限公司
版权所有,翻版必究 ◎2007-2008copyright
皖ICP备17008567号-1
皖公网安备 34030002020793号