У меня есть рабочий сервер (Ubuntu 13.10), работающий с postgresql 9.1.
Я хочу использовать несколько функций 9.3, поэтому хочу обновить.
Может ли кто-нибудь помочь мне с обновлением с 9.1 до 9.3, чтобы время простоя составило не более 30 минут. или так?
Основная задача - предотвратить потерю данных или избыточность файлов.
postgresql
postgresql-9.1
Рам Кумар
источник
источник
Ответы:
Существует три основных способа обновления PostgreSQL с разных основных версий (например, с 9.1 до 9.3).
Обновление с помощью pg_dump
Первый, и рекомендуется, если это возможно, сделать дамп старой (9.1) версии, используя двоичный файл более новой (9.3) версии, и восстановить его на новом кластере, созданном из более новой версии.
Этот подход, как правило, более медленный, но также и наиболее осуществимый. Один совет, чтобы сделать это более быстрым, использует параллелизм. Чтобы создать дамп с параллельными заданиями, вы можете сделать:
Вы должны будете сделать это для каждой имеющейся у вас базы данных, настроить
--jobs=4
значение на любое значение (протестируйте некоторые значения от 2 до количества ядер и посмотрите, какая из них дает лучшую скорость). Кроме того, на этом этапе никто не должен подключаться к базе данных, любая модификация приведет к поврежденному дампу (из-за небезопасной опции--no-synchronized-snapshots
).После этого вы можете восстановить свой дамп в новый экземпляр, используя
pg_restore
:После этого рекомендуется запустить
ANALYZE
вашу базу данных:(если вы можете позволить себе время, работать только
--analyze
такжеVACUUM
базы данных и обновления карты видимости)Обновление с помощью pg_upgrade
Другой вариант, это использовать contrib
pg_upgrade
. Используя этот--link
метод, он обеспечивает действительно быстрый способ обновления PostgreSQL.Перед использованием вы должны сделать резервную копию всего каталога данных, потому что в
--link
режиме, если что-то пойдет не так, вы можете потерять как данные (новые и старые). Также прочтите всю документацию и особенно примечания внизу (есть некоторые ограничения для pg_upgrade).ОБНОВЛЕНИЕ: Пожалуйста, используйте
--check
опцию перед запуском окончательной команды. Также для больших баз данных рекомендуется запускать эту команду в сеансе экрана.Обновление с использованием инструмента репликации на основе триггера
Другой вариант обновления версии - использование инструмента репликации на основе триггера. Как Слони, Bucardo и Londiste.
Этот вариант требует минимального времени простоя, но над ним труднее всего работать.
Для этого вам нужно построить master-slave, где master - это ваша текущая версия (9.1), а slave - новая версия (9.3). Затем вы ждете первую синхронизацию (с системой, которая еще работает), после чего вы закрываете всех, кто подключен к базе данных (здесь начинается время простоя), ждете, когда ведомое устройство догонит, продвинет его (подчиненное устройство) к управлению и перенаправить всех клиентов / приложений на эту новую версию. И вы сделали.
Документация по Slony предоставляет пошаговое обновление PostgreSQL с использованием Slony .
Какой выбрать
Ну как всегда зависит, возобновим
Я надеюсь, что смогу помочь. Удачи.
источник
pg_dumpall
чтобы вывести все базы данных за один раз.Выполните следующие шаги для обновления Postgres 9.1 до 9.3:
Сначала создайте файл /etc/apt/sources.list.d/pgdg.list со следующим содержимым для Ubuntu:
Добавить ключ работает следующим образом:
Установите инструменты разработчика с помощью postgres:
Чтобы подтвердить нашу установку, мы введем «sudo pg_lsclusters» и увидим, как работают две наши версии PostgreSQL.
Остановить службу Postgressql:
Удалите кластер 9.3 по умолчанию, созданный установкой 9.3.
Создайте новый кластер 9.3 из существующего кластера 9.1.
Убедитесь, что новый кластер загружается, и мы запускаем PostgreSQL 9.3.
Если все работает, переходите на кластер 9.1.
для получения дополнительной информации обратитесь к этой ссылке
источник
Это может быть действительно полезно:
https://gist.github.com/ibussieres/11262268
Это для 12.04, но я предполагаю, что это довольно переносимо.
источник