兩個postgresSQL數據庫對象比對

1.環境
數據庫dev:開發數據庫
數據庫prod:生成數據庫
2.背景
最近在dev上做了大量模型改造,需要把修改的地方同步到生產數據庫prod中,但是每一步改動並沒有詳細的記錄,且新增加的對象不能同步上去。
3.實現
pg_dump -h localhost -U dev -T tab1 -T tab2  -s -f dev.dump
pg_dump -h localhost -U prod -T tab1 -T tab2  -s -f prod.dump
利用apgdiff-2.4.jar工具進行兩個文件的比對:
java -jar apgdiff-2.4.jar --ignore-start-with prod.dump dev.dump > diff.sql
最後在prod數據庫上執行diff.sql文件就可以了。
4.注意
apgdiff-2.4.jar在apgdiff官網可以下載
在導出dump文件的時候使用-T參數是排除表,爲什麼不用-t指定導出那些表呢?使用-t參數生產的dump文件在進行比對時會報錯:
 Exception in thread "main" java.lang.NullPointerException
at cz.startnet.utils.pgdiff.parsers.CommentParser.parseColumn(CommentParser.java:272)
at cz.startnet.utils.pgdiff.parsers.CommentParser.parse(CommentParser.java:46)
at cz.startnet.utils.pgdiff.loader.PgDumpLoader.loadDatabaseSchema(PgDumpLoader.java:202)
at cz.startnet.utils.pgdiff.loader.PgDumpLoader.loadDatabaseSchema(PgDumpLoader.java:239)
at cz.startnet.utils.pgdiff.PgDiff.createDiff(PgDiff.java:36)
at cz.startnet.utils.pgdiff.Main.main(Main.java:45) 
這可能是一個bug。Google一下解釋是:
 as the new bug summary states now, apgdiff currently does not support setting comments on columns that are inherited from other tables, which means in your case that apgdiff fails when it cannot find column xxxx in table main, though it should take it from main_parent where the column is defined. 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章