Можно ли сравнить две базы данных с одинаковой структурой? Допустим, у меня есть две базы данных DB1 и DB2, и я хочу проверить, есть ли между ними разница в данных.
Можно ли сравнить две базы данных с одинаковой структурой? Допустим, у меня есть две базы данных DB1 и DB2, и я хочу проверить, есть ли между ними разница в данных.
Ответы:
(обратите внимание, что большинство этих инструментов могут сравнивать только структуру, но не данные)
Бесплатные:
Коммерческий:
apgdiff
он плохо поддерживает наследование таблиц, и сразу же выдается исключение, когда я пытаюсь его использовать. WbSchemaDiff
работает очень хорошо, сюрприз!
Попробуйте использовать pg_dump
обе базы данных и сравнить файлы.
pg_dump
это нормально. Если вы видите существенные различия, pg_dump
вы, вероятно, пытаетесь сравнить несопоставимые вещи. Хотя бы для сравнения PG dbs.
psql -c '\x' -c 'SELECT... ORDER BY...'
вместо pg_dump
.
Еще одно бесплатное приложение (которое может сравнивать только структуру, но не данные ):
DBeaver - вы можете выбирать базы данных, таблицы и т. Д. Для сравнения друг с другом
Я оценил множество инструментов и нашел следующее решение:
Сравнение схем :
Самыми интересными оказались 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. Он отлично работает и генерирует реальный diff в 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), но мы, вероятно, также расширим его до данных. Я считаю, что это инструмент, который требуется многим магазинам, чтобы перейти от их текущей СУБД, не меняя при этом то, как работают их среды разработки, операции и т. Д.
Лучший инструмент, который я когда-либо видел https://pythonhosted.org/Pyrseas/
Получить дамп из базы данных A dbtoyaml ...
Создать миграцию из A => B yamltodb ... [файл, созданный на шаге 1]
Я также ищу инструмент для сравнения данных в базах данных (в частности, меня интересовало сравнение Redshift DB). Пока лучшее, что я нашел, - это https://www.dbbest.com/products/database-compare-suite/#close . К сожалению, срок действия бесплатной пробной версии истекает через день.
Я создал инструмент для сравнения двух живых баз данных PostgreSQL (не дампов), табличных данных и последовательностей. Довольно рано, но я добился того, чего хотел, может быть, это поможет и вам.
На мой взгляд, Dbforge - самый мощный инструмент для сравнения данных в postgresql. Это продукт компании Devart. Вы можете скачать здесь .