2

Я работаю над обновлением базы данных Postgresql с 8.4 до 9.1. Я столкнулся с бесчисленными проблемами (возможно, связан с местами размещения файлов Ubuntu), но я думаю, что вижу финишную черту. Pg_upgrade почти работает, но он терпит неудачу, когда он достигает первой базы данных «template0», потому что она уже существует.Postgresql 8.4-> 9.1 с ошибкой pg_upgrade, поскольку существует база данных 'template0'

psql:/var/lib/postgresql/pg_upgrade_dump_globals.sql:36: ERROR: database "template0" already exists 

There were problems executing "/usr/lib/postgresql/9.1/bin/psql" --set ON_ERROR_STOP=on --no-psqlrc --port 5432 --username "postgres" -f "/var/lib/postgresql/pg_upgrade_dump_globals.sql" --dbname template1 >> "/dev/null" 
Failure, exiting 

Эта база данных шаблона является, конечно, частью каждого нового кластера и не может быть удалена. Я попытался переименовать template0 и template1 (чтобы быть в безопасности) в новом кластере (после его воссоздания), но последующий вызов pg_upgrade также потерпел неудачу, но на этот раз жалуется, что шаблон1 не существует в новом кластере.

"/usr/lib/postgresql/9.1/bin/pg_ctl" -w -l "/dev/null" -D "/var/lib/postgresql/9.1/main" -o "-p 5432 -b" start >> "/dev/null" 2>&1 

connection to database failed: FATAL: database "template1" does not exist 

unable to connect to new postmaster started with the command: "/usr/lib/postgresql/9.1/bin/pg_ctl" -w -l "/dev/null" -D "/var/lib/postgresql/9.1/main" -o "-p 5432 -b" start >> "/dev/null" 2>&1 
Failure, exiting 

Я попробовал еще раз только переименование template0 и снова не удалось, но на этот раз с каким-то утверждение вопрос с самой Postgres.

executing: SELECT datcollate, datctype FROM  pg_catalog.pg_database WHERE datname = 'template0' 

pg_upgrade: /build/buildd/postgresql-9.1-9.1.3/build/../contrib/pg_upgrade/check.c:310: set_locale_and_encoding: Assertion `PQntuples(res) == 1' failed. 
Aborted (core dumped) 

Sanity Проверить Примечания: В случае, если кто-то думает «просто сделать полный SQL дамп и восстановить его», что не работает хорошо, либо, поэтому я пытаюсь получить pg_upgrade работать. Я также позаботился о том, чтобы каждый раз обновлять кластер и воссоздавать кластеры, чтобы не допустить, чтобы какие-либо реликвии отказов продолжали зависеть от обновления. База данных находится на томе Amazon, поэтому я не могу ничего сломать и всегда иметь резервную копию. Я нахожусь на ubuntu 12 и устанавливаю обе базы данных бок о бок.

В настоящее время у меня нет идей, которые не связаны с вступлением в источник postgresql и будут очень признательны за любую помощь и предложения относительно того, что делать дальше. Заранее спасибо.

+0

Отключить тему. Вы должны обратиться к http://dba.stackexchange.com/ –

ответ

6

Остановить. Сделайте чашку чая/кофе и сядьте.

  1. Убедитесь, что установлены 9.1 и 8.4 одновременно. Debian допускает это, поэтому предположительно ubuntu тоже.
  2. Используя версию pg_dump версии 9.1, выгрузите каждую из своих баз данных из 8.4 и либо дампалл для пользователей, либо просто вручную заново создайте их.
  3. Используя 9.1 pg_restore, восстановите свои базы данных в качестве пользовательских postgres вместе с флагом -create.

Если есть какие-либо проблемы с любыми этими шагами, вам необходимо будет их записать и предоставить подробную информацию. Ох - лучшее место для подробного пошагового совета, вероятно, является списком рассылки postgresql-general (см. Подробности на сайте). Вы можете потратить свое время и сделать каждый шаг вправо.

Угадайте, что вы пытаетесь сделать pg_upgrade в существующий каталог initdb-ed, который я не думаю, что он ожидает. В любом случае, дамп + восстановление - самый чистый способ сделать это - он также дает вам резервную копию вашей базы данных.