Удаление дубликатов схемы / таблиц из базы данных postgres, для которой был восстановлен дамп.
Сегодня я случайно восстановил файл pg_dumpall в базе данных, из которой был создан этот дампалл. Это восстановление вызвало массу дубликатов определенных идентификаторов и тому подобное.
Это сложная производственная база данных, и она не повредила всю базу данных, но она действительно влияет на возможность что-то менять на сайте, который ее использует. Теперь я знаю, что могу просто сократить свои потери и восстановить базу данных до первоначального значения pg_dumpall (это было совсем недавно, как прошлой ночью), но это будет означать, что работа / публикация полного дня на сайте, использующем базу данных, будет потеряна.
Что я могу сделать, чтобы исправить эту ситуацию?
1 ответ
Без первичных ключей это сложно. С первичными ключами этого не могло быть. Лучшее, что вы можете сделать, это ИМХО
- переименуйте все ваши схемы (например,
schema
->bad_schema
) - реимпортировать дамп прошлой ночью (конечно, без сброса БД)
- добавить ограничения PK для всех новых таблиц (это требует ручной работы!)
- для всех
schemas.tables
: добавить строки изbad_schema.tableXXX
вschema.tableXXX
если они еще не существуют (для этого могут потребоваться (неуникальные) индексы наbad_schema.XXX
, соответствующие предполагаемым ФК) - (необязательно) настроить последовательности на существующее максимальное (значение) в соответствующем столбце.
Если вы не понимаете вышесказанного (или если это слишком много работы), просто возьмите свои потери и установите вчерашнюю резервную копию. Сначала вы можете переименовать поврежденную базу данных (или переименовать схемы), а затем попытаться извлечь из нее новые записи.
Резюме: осознайте, что для каждого (частично) решения требуются Первичные ключи. Стол без ПК хрупок и бессмысленен.