понеділок, 2 листопада 2009 р.

Порівняння даних таблиць у PostgreSQL за контрольною сумою

Для попереднього порівняння даних таблиць на різних серверах у старій нотатці запропоновано обчислити MD5 від двійкового подання масиву:

Запит для контрольної суми вибірки

select md5(array_send(array(select B from A order by 1))) as md5;

Приклад охоплює значення стовпця B таблиці A, а не всю базу даних. Для зіставлення потрібно виконувати однаково визначений запит на обох серверах і враховувати типи даних, порядок, NULL та узгоджений стан даних. Сумісність двійкового подання між різними типами або версіями не слід припускати автоматично.

Межі такого порівняння

Однакова контрольна сума є попереднім сигналом, а не безумовним доказом тотожності: колізії можливі. Для відповідальної перевірки потрібне безпосереднє зіставлення даних, а великі вибірки не варто без оцінки пам’яті збирати в один масив.

Опис md5(bytea): документація PostgreSQL. Цей прийом не порівнює схеми, індекси, права або інші об’єкти бази.

Немає коментарів:

Калькулятор K2: від запитання про ціну до готової комерційної пропозиції

«А скільки коштуватиме інша комплектація?» — природне запитання покупця. Якщо для відповіді менеджер щоразу відкриває таблицю, шукає коефіці...