Сравнишь копию с оригиналом так, чтобы заметить даже одно изменённое значение.
Восстановление без ошибок ещё не доказывает, что копия та же: дамп мог оказаться старым или не той базы. Число строк и сумма ловят потерю строк, но не подмену: два заказа, обменявшиеся суммами, дадут те же числа. Надёжнее контрольная сумма всех строк по порядку:
string_agg склеивает строки таблицы в одну, md5 сворачивает её в 32 знака. Любое изменённое значение меняет их целиком. Та же команда с -d shop_check должна напечатать то же самое — у копии из упражнения это 6|740|19f77b62….
Счётчик сверяют отдельно: SELECT last_value FROM orders_id_seq в обеих базах. Разный — и первая же вставка в копии упадёт с duplicate key, как в начале урока.
Ты сверяешь копию с оригиналом. Что значит такой вывод?
$ psql -XAt -d shop -c "SELECT count(*), sum(amount), md5(…) FROM orders o"
6|740|19f77b626f2923582c2bf4f650e420c3
$ psql -XAt -d shop_check -c "SELECT count(*), sum(amount), md5(…) FROM orders o"
6|740|faa22fc598d99673259e8f65658958b9
-
Строк поровну — по 6 в обеих базах, сумма тоже 740. Отличаются значения, это показывает
md5. -
Число строк и сумма совпадут и у разных данных — например, если два заказа обменялись суммами. Разные
md5значат, что хотя бы одно значение не то. -
md5 считается от текста строк, а не от имени базы: у одинаковых таблиц он совпадает — так было у shop и shop_check в упражнении.
Строк поровну и сумма та же, а контрольные суммы разные: хотя бы одно значение в копии отличается. Найти его поможет сравнение таблиц построчно — psql -d shop_check -c 'TABLE orders' рядом с тем же для shop.
Главное в шаге
- Восстановление без ошибок — ещё не проверка: копию сверяют с оригиналом.
-
Число строк ловит потерю,
md5всех строк по порядку — любое изменённое значение. -
Счётчик копии совпадает с оригиналом, иначе вставка упадёт с
duplicate key.