sen*_*nin 78 postgresql schema-compare
是否可以比较具有相同结构的两个数据库?假设我有两个数据库DB1和DB2,我想检查它们之间的数据是否存在差异.
a_h*_*ame 68
免费的:
商业:
Júl*_*tos 28
尝试pg_dump在两个数据库上使用并区分文件.
我评估了很多工具,并找到以下解决方案:
模式比较:
最有趣的是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用于迁移/版本跟踪。
我正在为Postgres开发一个全面的比较工具。Beta版将免费提供。
最初,这只是架构(DDL)比较,但我们可能还会扩展到数据。我相信这是许多商店需要的一种工具,以便从当前的RDBMS迁移而不必同时更改其开发环境,操作等的工作方式。
| 归档时间: |
|
| 查看次数: |
73967 次 |
| 最近记录: |