Я разработчик, которому почти ничего не известно об администрировании баз данных. Только что я пытался дважды проверить скрипт обновления базы данных (то, что я могу, в основном, управлять в целом), и поскольку он делает несколько вещей, я хотел сделать резервную копию, чтобы, если он сломан, я мог восстановить, исправить сценарий и попробуйте еще раз, не беспокоясь о том, что вручную отменять частичные изменения схемы.
Что меня смущает, так это то, что после того, как мой скрипт обновления действительно потерпел неудачу, пройдя пару ALTER TABLE
шаги, когда я выполняю восстановление, я получаю различные ошибки (из несвязанных таблиц) о повторяющихся ключах, нарушениях нулевых ограничений и т. д. Кроме того, изменения схемы, сделанные моим скриптом, по-видимому, не отменяются восстановлением.
Поэтому мне кажется, что я неправильно понимаю некоторые основные аспекты того, как работал процесс дампа / восстановления. Все, что я сделал, это создал файл резервной копии базы данных с помощью «pg_dump», который я затем отправил обратно в «psql». Это в основном работал, за исключением нескольких ошибок и, как я уже сказал, невозможности восстановить саму схему до ее прежнего состояния. Разве он вообще не пытается этого сделать? Есть ли процесс, которому нужно следовать, чтобы сделать то, что я ожидал (то есть полное восстановление до прежнего состояния)?
Я единственный, кто пользуется этой базой данных; это локальный сервер на моей рабочей станции, поэтому не похоже, что другие разработчики возятся с ним, пока я занимаюсь своим делом.
Это postgresql 8.4 на машине Ubuntu Linux (natty), если это важно.
Суть того, что вы пропустили, заключается в том, что если ваша команда pg_dump не включает -c
вариант (clean
- Отбросьте объекты перед их созданием) вам нужно отбросить все свои таблицы перед восстановлением.
pg_dump
производит SQL для воссоздания таблиц и загрузки в них данных, но если таблица уже существует, CREATE TABLE
команда завершится ошибкой (поэтому ваша схема не вернулась к тому, что вы ожидали), и если в таблицах уже есть данные, вы получите повторяющиеся строки или множество ошибок, связанных с повторяющимися ключами (в зависимости от того, есть ли ключи определено или нет).
Вам следует сесть, прочитать и понять Документация Postgres по резервному копированию / восстановлению и страница руководства pg_dump. Фактически, я бы посоветовал прочитать документацию Postgres по тем вопросам, в которых вы не чувствуете себя на 100% уверенным, и / или задать вопрос в списках рассылки. Документация Postgres замечательного качества, и я держу ее рядом с Справочник FreeBSD в качестве примера документации все проекты с открытым исходным кодом должны стремиться производить ...
Альтернативой подходу pg_dump -c является использование pg_restore --clean.
Мы используем pg_dump -Fc, что исключает использование -c.