Назад | Перейти на главную страницу

Обновите базу данных Postgresql с 9.1 до 9.2 И с 32-разрядной до 64-разрядной

В рамках обновления сервера мы переходим с 32-битного Linux на 64-битный Linux (Gentoo, если это имеет значение) и Postgresql 9.1 на 9.2. У меня чертовски много времени на обновление базы данных с помощью pg_upgrade ...

Моя первая попытка заключалась в том, чтобы спрятать старый (32-битный 9.1) каталог pgsql bin & lib, обновить систему, а затем запустить обновленную (64-битную) систему:

pg_upgrade -b pgsql.old/bin -B /usr/lib64/postgresql-9.2/bin -d data.old -D data.new

Это не удается, потому что pg_upgrade пытается запустить pgsql.old / bin / pg_ctl с неправильным libpq.so.5 (64-разрядная версия системы, а не 32-разрядная версия в pgsql.old / lib). Если я установлю LD_LIBRARY_PATH так, чтобы он указывал на pgsql.old / lib, тогда я мог бы вручную запустить старый 32-битный pg_ctl нормально, но это, похоже, не помогает для pg_upgrade.

Тогда я подумал, что просто установлю 64-битный Postgresql 9.1 вместе с 9.2. Теперь, когда я бегу:

pg_upgrade -b /usr/lib64/postgresql-9.1/bin -B /usr/lib64/postgresql-9.2/bin -d data.old -D data.new

Бинарные файлы работают нормально, но обновление не выполняется раньше:

old and new pg_controldata alignments are invalid or do not match

что, я думаю, связано с 32-битными и 64-битными проблемами выравнивания в БД?

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

Я бы никогда не поступил так, как ты. Для справки, я работаю с PostgreSQL с, ох, 6.x дней (то есть много-много лет).

Я всегда, без вопросов, делаю что-то в этом роде:

  1. Сбросьте старую версию с помощью pg_dump
  2. установите новую версию, возможно, вместе с текущей версией в вашей ситуации. Я всегда связываю символьную ссылку на местоположение по умолчанию. Если, например, pgsql оказывается в / usr / local / pgsql, я меняю его на /usr/local/pgsql-v9.1.2, а затем связываю это символом с pgsql, поэтому мои сценарии RC не нуждаются в большой настройке и не требуют мой LD_CONFIG
  3. Запустите новую среду БД с только что установленной новой версией
  4. Восстановите свои данные с помощью psql

Я использую собственный сценарий RC для остановки, запуска и перезапуска почтмейстера, и в нем у меня есть настройки, указывающие на текущие каталоги данных и xlog.

Кроме того, я понимаю, что вы используете диспетчер пакетов определенного дистрибутива. Я избегаю этого и всегда создаю PostgreSQL из исходников.

Вы не можете использовать pg_upgrade для обновления с 32-битной до 64-битной или вообще с любой ОС / ЦП / платформы на любую другую ОС / ЦП / платформу. Файлы данных зависят от платформы, и pg_upgrade работает путем простого копирования (или связывания) файлов данных без изменений. Так что это никогда не сработает.

На этом этапе у вас есть варианты: дамп / восстановление или использование системы логической репликации для перемещения ваших данных (Slony, Londiste, Bucardo).