Як порівняти бази даних?


0

Я намагався використовувати meld на двох звалищах з двох різних баз даних з однієї СУБД, але здається, що ці звалища не можна порівняти, оскільки не є канонічними.

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

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


Кожна платформа db, з якою я працював, потребувала зовнішньої утиліти для цієї мети, і Postgre, ймовірно, не відрізняється. Перевір це: devart.com/dbforge/postgresql/datacompare
Frank Thomas

Гаразд, але можливо pg_dump Підтримувач, додавши опцію для канонічного виведення, не був би великим. Якщо meld це нормально, і це, чи не природний підхід намагається його використовувати?
uprego

Відповіді:


1

Найпростіше рішення може бути досить ручним:

  1. Скиньте імена схем і таблиць.
  2. Цикл над іменами схеми та таблиць, кожен по черзі скидає (переконайтеся, що порядок за набором стовпців, що дає унікальне замовлення ) до одного файлу або файлу за таблицею.
  3. Повторіть для іншої бази даних.

Це допоможе вам легко порівняти результати.


Мені подобається, і в якийсь момент вона впевнена, що я спробую. Однак я не впевнений, що схема буде порівнянна (вони мутантні схеми з сотень таблиць і обмежень), але мені дуже подобається ідея проходження ORDER BY або щось до інструкції дампа. Потрібно було б також додатковий крок для скорочення бінарних / base64 / blob стовпців, але повинні існувати альтернативи для кодування, наприклад. awk, sed, Python.
uprego

1
Просто отримайте контрольну суму двійкових або інших надмірно довгих стовпців. Принаймні, тоді можна з упевненістю сказати, чи ці значення різні.
l0b0

Я не знаю способу сортування інших рядків, ніж з зовнішнім сценарієм, який виконував сортування рядків для кожної таблиці (рядки між рядками, що відповідають "^ COPY" і "^" a pg_dump текстовий дамп.
uprego

Ви можете зробити order by 1, 2, 3, [etc] просто замовити всі стовпці.
l0b0

Я думав використовувати тільки pg_dump... Так, але підтримка dirtrees у інструменті порівняння, це нормально, скидаючи вміст таблиць до окремих файлів, використовуючи psql. Але я постараюся не використовувати цей підхід, так що двійкова контрольна сума буде опцією сценарію, можна буде мати один файл, і що один файл буде відновлюватися, коли двійкові стовпці не були б перевірені. Я намагаюся розробити щось ...
uprego
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.