现在有这样一个需求:比较两个数据库的差异,数据库的结构差异很小可以忽略,重点是比较数据库表数据。
数据库软件为:postgres。
现在的做法是:
pg_dump -x -O --column-inserts --file db1.sql db1
pg_dump -x -O --column-inserts --file db2.sql db2
导出数据库后,使用文本比较软件,比如beyondCompare进行比较。
可是这种比较不直观,有以下缺点:
- 无重点,需要逐个差异逐个看,能否先给出差异的表有哪些
- 不易查看规律,有的字段数据长,有的短,不能发现是某一列有差异
- 数据量较大时,比较过程很慢
补充:
- 数据库模式比较的还比较多,比如liquibase就很好用,github开源免费。
- 数据库内容比较的工具有,但都是收费的,且没有开源免费的,也没有mac平台的。
我决定,自己用jdbc写一个,先实现数据库模式比较和数据库表比较,序列和存储过程比较放在后面。
提供个思路
1、使用dblink,使两个数据库可以相互访问
2、使用存储过程,遍历数据库中的表,进行比较:首先可以比较表的记录数,快速发现有差异的表,比较表内容的话,就需要动态生成sql语句了(需要表有主键才好做匹配)