Подтвердить что ты не робот

Как сравнить данные между двумя базами данных в PostgreSQL?

Можно ли сравнивать две базы данных с одинаковой структурой? Скажем, у меня есть две базы данных DB1 и DB2, и я хочу проверить, существует ли разница между данными между ними.

4b9b3361

Ответ 1

Есть несколько инструментов:

(обратите внимание, что большинство из этих инструментов могут сравнивать только структуру, но не данные)

Свободные:

Коммерческий:

Ответ 2

Попробуйте использовать pg_dump в обеих базах данных и различать файлы.

Ответ 4

Я работаю над комплексным инструментом сравнения для Postgres. Это будет бесплатно, пока в бета-версии.

PostgresCompare

Изначально это сравнение схем (DDL), но мы, вероятно, расширим и данные. Я полагаю, что это инструмент, который необходим многим магазинам для того, чтобы перейти от своей текущей СУБД, не изменяя при этом свою среду разработки, операции и т.д.

Ответ 5

Лучший инструмент, который я когда-либо видел https://pythonhosted.org/Pyrseas/

  • Получить дамп из базы данных A dbtoyaml...

  • Сгенерировать миграцию из A = > B yamltodb... [файл, сгенерированный на шаге 1]

Ответ 6

Я оценил множество инструментов и нашел следующее решение:

Схема сравнения:

Наиболее интересными были Liquibase, Persyas и PgCodeKeeper:

(проблема) Liquebase преобразует:

 SET DEFAULT nextval('myschema.name_id_seq'::regclass)

в

BIGSERIAL

Так что было отказано в использовании

(проблема) Персиас работал нормально, пока я не добавил некоторую дополнительную схему, и он начинает выдавать следующее:

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 только для отслеживания миграции/версии.

Ответ 7

Я также ищу инструмент для сравнения данных в базах данных (в частности, мне было интересно сравнить Redshift DB). Пока что я нашел https://www.dbbest.com/products/database-compare-suite/#close. К сожалению, бесплатный пробный период истекает через один день.