是否可以比较两个具有相同结构的数据库?假设我有两个数据库DB1和DB2,我想检查它们之间的数据是否存在差异。
是否可以比较两个具有相同结构的数据库?假设我有两个数据库DB1和DB2,我想检查它们之间的数据是否存在差异。
Answers:
(请注意,这些工具中的大多数只能比较结构,而不能比较数据)
自由人:
商业:
apgdiff
不能很好地支持继承表,并且在尝试使用它时会立即引发异常。WbSchemaDiff
效果很好,惊喜!
尝试pg_dump
同时在两个数据库上使用并比较文件。
pg_dump
很好。如果您发现与众不同之处,则pg_dump
可能是在尝试比较无法比拟的事物。至少用于比较PG数据库。
psql -c '\x' -c 'SELECT... ORDER BY...'
代替pg_dump
。
我评估了很多工具,并找到以下解决方案:
模式比较:
最有趣的是Liquibase,Persyas和PgCodeKeeper:
(问题)Liquebase转换为:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
进入
BIGSERIAL
因此被拒绝使用
(问题)Persyas正常工作,直到我添加了一些其他架构,并开始抛出以下内容:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
因此,我发现PgCodeKeeper可以完美运行,并且还可以运行(您可以检查发行版)。我使用以下命令:
./pgcodekeeper-cli.sh -E -I ./ignore.txt \
-s "jdbc:postgresql://localhost/postgres?user=postgres&password=123" \
-t "jdbc:postgresql://localhost/postgres?user=postgres&password=123" \
-o /result/schema-diff-$(date +'%m%d%y_%H%M%S').sql
数据比较: 我尝试使用Liquebase,但是它不起作用,您可以在未解决的有关使用Liquebase的两个数据库的数据差异的问题中看到我尝试的步骤
所以我找到了另一个项目 SQL Workbench / J, 它的工作原理非常好,并在sql中生成了真正的差异。我使用以下命令:
java -jar /sqlworkbench.jar -command="'WbDataDiff -excludeTables=$EXCLUDE_TABLES \
-referenceConnection=$REFERENCE_CONNECTION \
-targetConnection=$TARGET_CONNECTION -referenceSchema=$1 \
-targetSchema=$1 -file=$DIFF_RESULT_FILE -singleFile=true \
-includeDelete=true -ignoreMissingTarget=true ;'"
两种工具都支持对象过滤。真的很方便。
移居
最后,我仅将Liquebase用于迁移/版本跟踪。
我正在为Postgres开发一个全面的比较工具。Beta版将免费提供。
最初,这只是架构(DDL)比较,但我们可能还会扩展到数据。我相信,这是许多商店需要的工具,以便从当前的RDBMS迁移而不必同时更改其开发环境,操作等的工作方式。
我见过的最好的工具 https://pythonhosted.org/Pyrseas/
从数据库A dbtoyaml获取转储...
从A => B yamltodb生成迁移... [在步骤1中生成的文件]
我也在寻找一种比较数据库中数据的工具(特别是我对比较Redshift DB感兴趣)。到目前为止,我发现的最好的是https://www.dbbest.com/products/database-compare-suite/#close。不幸的是,免费试用将在一天后过期。
我创建了一个工具来比较2个实时PostgreSQL数据库(不是转储),表数据和序列。早期,但实现了我想要的功能,也许它也可以为您提供帮助。
我认为Dbforge是postgresql中数据映射的最强大工具。它是Devart公司的产品。您可以在此处下载。