PostgreSQL 12 вышел 03.10.2019. Обновится со старой версии можно через pg_dumpall и pg_upgrade. Ниже описан вариант обновления через pg_upgrade.
Установите PostgreSQL 12:
sudo apt-get update
sudo apt-get install postgresql-12 postgresql-server-dev-12
Перенесите ваши кастомные настройки из старых конфигов в новые. Различия конфигов разных версий удобно посмотреть командами:
diff /etc/postgresql/11/main/postgresql.conf /etc/postgresql/12/main/postgresql.conf
diff /etc/postgresql/11/main/pg_hba.conf /etc/postgresql/12/main/pg_hba.conf
Остановите запущенный PostgreSQL:
sudo systemctl stop postgresql.service
Перейдите в каталог с временными файлами. Туда будут записаны логи и добавлены некоторые скрипты:
cd /tmp
Запускаем работу в командной строке от пользователя postgres:
sudo su postgres
Безопасно проверяем кластеры, без изменения каких-либо данных:
/usr/lib/postgresql/12/bin/pg_upgrade \
— old-datadir=/var/lib/postgresql/11/main \
— new-datadir=/var/lib/postgresql/12/main \
— old-bindir=/usr/lib/postgresql/11/bin \
— new-bindir=/usr/lib/postgresql/12/bin \
— old-options ‘-c config_file=/etc/postgresql/11/main/postgresql.conf’ \
— new-options ‘-c config_file=/etc/postgresql/12/main/postgresql.conf’ \
— check
Если ошибок нет, проводим миграцию данных (если у Вас нет необходимости в копировании файлов в новый кластер, то используйте параметр — link. Будут использованы жесткие ссылки на старый кластер, без копирования):
/usr/lib/postgresql/12/bin/pg_upgrade \
— old-datadir=/var/lib/postgresql/11/main \
— new-datadir=/var/lib/postgresql/12/main \
— old-bindir=/usr/lib/postgresql/11/bin \
— new-bindir=/usr/lib/postgresql/12/bin \
— old-options ‘-c config_file=/etc/postgresql/11/main/postgresql.conf’ \
— new-options ‘-c config_file=/etc/postgresql/12/main/postgresql.conf’
Возвращаемся к обычному пользователю
exit
Ваш старый PostgreSQL, скорее всего, использовал порт 5432, а для нового, по-умолчанию, используется 5433. Меняем друг на друга.
sudo vim /etc/postgresql/12/main/postgresql.conf
# меняем "port = 5433" на "port = 5432"
sudo vim /etc/postgresql/11/main/postgresql.conf
# меняем "port = 5432" на "port = 5433"
Запускаем PostgreSQL
sudo systemctl start postgresql.service
Работаем от пользователя postgres
sudo su postgres
Проверяем версию запущенного PostgreSQL
psql -c "SELECT version();"
На новом кластере нет никакой статистики. Нужно запустить ANALYZE по кластеру. Для этого pg_upgrade создал скрипт analyze_new_cluster.sh
. Запускаем.
./analyze_new_cluster.sh
Возвращаемся к обычному пользователю
exit
Смотрим, какие старые версии PostgreSQL остались в системе.
apt list --installed | grep postgresql
Удаляем старые версии PostgreSQL, например:
sudo apt-get remove postgresql-11
Удаляем старую конфигурацию:
sudo rm -rf /etc/postgresql/11/
В последний раз заходим под пользователем postgres
sudo su postgres
Удаляем данные старого кластера
./delete_old_cluster.sh
Обновление завершено!
Источник: https://dmitry-naumenko.medium.com/%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-postgresql-%D1%81-11-%D0%B4%D0%BE-12-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8-b35fa87a0c35
Was this helpful?
0 / 0