Как сравнить базы данных?

1020
uprego

Я пытался использовать meldдва дампа из двух разных баз данных из одной и той же РСУБД, но кажется, что эти дампы не сравнимы, потому что они не каноничны.

Я пробовал оба pg_dump ...(стандартные) и pg_dump -a ...(только данные), но оба кажутся не каноническими, они не так уж отличаются, но различие между сторонами показывает много ложных срабатываний.

Я pg_dumpбезуспешно искал подходящий вариант, может быть, для этого нужен специальный инструмент?

0
Для каждой платформы БД, с которой я работал, требовалась внешняя утилита для этой цели, и Postgre, вероятно, ничем не отличается. проверить это: http://www.devart.com/dbforge/postgresql/datacompare/ Frank Thomas 10 лет назад 0
Хорошо, но, возможно, для сопровождающего `pg_dump` добавление опции для канонического вывода не будет большой проблемой. Если с 'meld' все в порядке, и так, разве это не естественный подход, пытающийся использовать его? uprego 10 лет назад 0

1 ответ на вопрос

1
l0b0

The easiest solution may be rather manual:

  1. Dump the schema and table names.
  2. Loop over schema and table names, dumping each in turn (making sure to order by a set of columns giving a unique ordering) to the same file or a file per table.
  3. Repeat for the other database.

This should get you an easily comparable output.

Мне это нравится, и в какой-то момент я обязательно попробую. Однако я не уверен, что схемы будут сопоставимы (это мутантные схемы сотен таблиц и ограничений), но мне очень нравится идея передачи ORDER BY или чего-то еще в инструкцию dump. Также потребуется дополнительный шаг для сокращения двоичных столбцов / столбцов base64 / blob, но должны быть альтернативы для кодирования, например, `awk`,` sed`, Python. uprego 10 лет назад 0
Просто получите контрольную сумму двоичных или других чрезмерно длинных столбцов. По крайней мере, тогда вы можете с уверенностью сказать, отличаются ли значения. l0b0 10 лет назад 1
Я не знаю способа сортировки строк, кроме как с помощью внешнего скрипта, который выполнял сортировку строк для каждой таблицы (строки между строками, совпадающими с «^ COPY» и «^ \\.») И дословно скопировал всю оставшуюся информацию в текстовый дамп `pg_dump`. uprego 10 лет назад 0
Вы можете сделать `order by 1, 2, 3, [etc]`, чтобы просто упорядочить по всем столбцам. l0b0 10 лет назад 0
Я думал об использовании только `pg_dump` ... Да, но имея поддержку dirtrees в инструменте сравнения, можно просто записать содержимое таблиц в отдельные файлы с помощью` psql`. Но я постараюсь не использовать этот подход, так что двоичная контрольная сумма будет опцией сценария, можно будет иметь один файл, и этот единственный файл будет восстанавливаемым всякий раз, когда двоичные столбцы не будут контрольной суммой. Я пытаюсь разработать что-то как можно скорее ... uprego 10 лет назад 0
На мой взгляд, мой подход к сортировке строк вне SQL дает достаточно хорошие результаты. [Источник] (http://ow.ly/DRqXV). uprego 9 лет назад 0