如何检查PostgreSQL中两个数据库之间的区别?

sen*_*nin 78 postgresql schema-compare

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

a_h*_*ame 68

有几种工具:

免费的:

  • pgquarrel:http://eulerto.github.io/pgquarrel
  • apgdiff:http://apgdiff.com/
  • Liquibase(Cross DBMS):http://www.liquibase.org
  • WbSchemaDiff(Cross DBMS):http://www.sql-workbench.net/manual/compare-commands.html
  • Migra:https://migra.djrobstep.com/

商业:

  • 只有liquibase.org和Aqua Data Studio似乎比较数据,其他只是比较模式. (12认同)
  • -1.OP询问有关***数据***(记录/行)的比较,并且您大多列出了比较_structure_的工具,OP明确指出目标数据库之间是相同的,因此没有理由比较它们.请澄清哪些实际上做了所要求的事情. (12认同)
  • 似乎`apgdiff`不能很好地支持继承表,并且当我尝试使用它时会立即抛出异常.`WbSchemaDiff`效果很好,很惊喜! (2认同)

Júl*_*tos 28

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

  • +1简单直接.但是,如果表格是以不同的顺序构建的,那么我们是否确定pg_dump会以相同的顺序从相同的数据库中转储数据?(我希望订单基于约束依赖关系,而不是关心创建时间,但希望不能很好地扩展.) (21认同)
  • 你可以使用-a -d和| 排序.但是这些数据可能无法导入,但是基本检查也没问题. (9认同)
  • 我们没有.更好的是,我没有.好点子. (6认同)

小智 10

另一款免费应用:

DBeaver - 您可以选择数据库,表格等进行相互比较


i.b*_*nko 6

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

模式比较

最有趣的是Liquibase,Persyas和PgCodeKeeper:

问题)Liquebase转换为:

 SET DEFAULT nextval('myschema.name_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)

进入

BIGSERIAL
Run Code Online (Sandbox Code Playgroud)

所以被拒绝使用

问题)Persyas正常工作,直到我添加了一些其他架构,然后它开始抛出以下内容:

pyrseas_1       | TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)

因此,我发现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
Run Code Online (Sandbox Code Playgroud)

数据比较: 我尝试使用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 ;'"
Run Code Online (Sandbox Code Playgroud)

两种工具都支持对象过滤。真的很方便。

移居

最后,我仅将Liquebase用于迁移/版本跟踪。


Nei*_*son 5

我正在为Postgres开发一个全面的比较工具。Beta版将免费提供。

Postgres比较

最初,这只是架构(DDL)比较,但我们可能还会扩展到数据。我相信这是许多商店需要的一种工具,以便从当前的RDBMS迁移而不必同时更改其开发环境,操作等的工作方式。