107

是否可以比较具有相同结构的两个数据库?假设我有两个数据库 DB1 和 DB2,我想检查它们之间的数据是否存在差异。

4

10 回答 10

96

有几种工具:

(请注意,这些工具中的大多数只能比较结构,而不能比较数据)

免费的:

商业的:

于 2011-01-26T13:04:15.580 回答
46

尝试pg_dump在两个数据库上使用并区分文件。

于 2011-01-26T12:56:28.920 回答
14

另一个免费的应用程序(只能比较结构,但不能比较数据):

DBeaver - 您可以选择数据库、表等进行比较

于 2016-09-21T12:57:31.777 回答
9

我评估了很多工具并找到了以下解决方案:

架构比较

最有趣的是 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 进行迁移/版本跟踪。

于 2019-09-12T07:56:05.390 回答
6

我正在为 Postgres 开发一个全面的比较工具。它将在测试阶段免费。

Postgres比较

最初这只是模式 (DDL) 比较,但我们可能还会扩展到数据。我相信这是许多商店需要的工具,以便从他们当前的 RDBMS 中迁移出来,而不必改变他们的开发环境、操作等的工作方式。

于 2017-04-21T17:06:31.107 回答
2

我见过的最好的工具 https://pythonhosted.org/Pyrseas/

  1. 从数据库中获取转储 A dbtoyaml ...

  2. 从 A => B yamltodb 生成迁移 ... [步骤 1 中生成的文件]

于 2017-09-24T16:39:04.970 回答
0

我也在寻找一种工具来比较数据库中的数据(特别是我对比较 Redshift DB 很感兴趣)。到目前为止,我发现的最好的是https://www.dbbest.com/products/database-compare-suite/#close。不幸的是,免费试用会在一天后到期。

于 2016-12-27T14:08:40.387 回答
0

我创建了一个工具来比较 2 个实时 PostgreSQL 数据库(不是转储)、表数据和序列。很早的时候,但实现了我想要它做的事情,也许它也可以帮助你。

https://github.com/dmarkey/pgdatadiff

于 2019-12-20T12:54:32.097 回答
0

在我看来,Dbforge 是 postgresql 中最强大的数据映射工具。它是 Devart 公司的产品。你可以在这里下载。

于 2020-05-13T12:27:31.787 回答
0

https://github.com/covrom/goerd用于简单数据库(没有触发器、存储过程和嵌套表)。

于 2021-09-03T11:32:40.740 回答