Удаление дубликатов схемы / таблиц из базы данных postgres, для которой был восстановлен дамп.

Сегодня я случайно восстановил файл pg_dumpall в базе данных, из которой был создан этот дампалл. Это восстановление вызвало массу дубликатов определенных идентификаторов и тому подобное.

Это сложная производственная база данных, и она не повредила всю базу данных, но она действительно влияет на возможность что-то менять на сайте, который ее использует. Теперь я знаю, что могу просто сократить свои потери и восстановить базу данных до первоначального значения pg_dumpall (это было совсем недавно, как прошлой ночью), но это будет означать, что работа / публикация полного дня на сайте, использующем базу данных, будет потеряна.

Что я могу сделать, чтобы исправить эту ситуацию?

1 ответ

Решение

Без первичных ключей это сложно. С первичными ключами этого не могло быть. Лучшее, что вы можете сделать, это ИМХО

  1. переименуйте все ваши схемы (например, schema -> bad_schema)
  2. реимпортировать дамп прошлой ночью (конечно, без сброса БД)
  3. добавить ограничения PK для всех новых таблиц (это требует ручной работы!)
  4. для всех schemas.tables: добавить строки из bad_schema.tableXXX в schema.tableXXX если они еще не существуют (для этого могут потребоваться (неуникальные) индексы на bad_schema.XXX, соответствующие предполагаемым ФК)
  5. (необязательно) настроить последовательности на существующее максимальное (значение) в соответствующем столбце.

Если вы не понимаете вышесказанного (или если это слишком много работы), просто возьмите свои потери и установите вчерашнюю резервную копию. Сначала вы можете переименовать поврежденную базу данных (или переименовать схемы), а затем попытаться извлечь из нее новые записи.


Резюме: осознайте, что для каждого (частично) решения требуются Первичные ключи. Стол без ПК хрупок и бессмысленен.

Другие вопросы по тегам