Обновление PostgreSQL с 11 до 12 версии

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