【发布时间】:2011-06-15 20:13:01
【问题描述】:
是否可以比较具有相同结构的两个数据库? 假设我有两个数据库 DB1 和 DB2,我想检查它们之间的数据是否存在差异。
【问题讨论】:
-
dbForge Data Compare for PostgreSQL 解决了此类问题。
-
postgrescompare.com/downloads 现在也比较数据
是否可以比较具有相同结构的两个数据库? 假设我有两个数据库 DB1 和 DB2,我想检查它们之间的数据是否存在差异。
【问题讨论】:
(注意这些工具大多只能比较结构,不能比较数据)
免费的:
商业:
【讨论】:
apgdiff 不支持继承表,当我尝试使用它时立即抛出异常。 WbSchemaDiff 效果很好,惊喜!
apgdiff 似乎不再起作用了。
尝试在两个数据库上使用pg_dump 并区分文件。
【讨论】:
pg_dump 就可以了。如果您看到与 pg_dump 的显着差异,您可能正在尝试比较无法比较的事物。至少用于比较 PG dbs。
psql -c '\x' -c 'SELECT... ORDER BY...' 而不是pg_dump。
另一个免费应用程序(can only compare structure, but not data):
DBeaver - 可以选择数据库、表等相互比较
【讨论】:
我评估了很多工具并找到了以下解决方案:
架构比较:
最有趣的是 Liquibase、Persyas 和 PgCodeKeeper:
(issue) Liquebase 转换:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
进入
BIGSERIAL
所以被拒绝使用
(issue) 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,但它不起作用,您可以查看我在未回答的问题 about data difference of two databases with 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 开发一个全面的比较工具。它在测试阶段是免费的。
最初这只是模式 (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公司的产品。你可以下载here。
【讨论】:
将https://github.com/covrom/goerd 用于简单数据库(没有触发器、存储过程和嵌套表)。
【讨论】: