Может оказаться такая ситуация, что после установки операционной системы Debian, вместе с ней установился пакет с СУБД PostgreSQL версии 11.
На август 2022 уже запланирован выпуск 15 версии PostgreSQL. СУБД динамично развивается и сообщество пополняется всё большим количеством администраторов этой СУБД.
Из-за этих особенностей Debian, для получения полного свежайшего функционала СУБД, нужно обновить её версию.
Как это сделать?
Подготовка к обновлению PostgreSQL
Обязательно сделайте ДАМП всех существующих данных.
Если вы под root пользователем, то смените его на пользователя postgres:
su - postgres
После этого перейдите в каталог временных файлов:
cd /tmp
Выполните команду полного копирования:
pg_dumpall > my_pg_backup.sql
При необходимости для выхода используйте
exit
Установите последнюю версию PostgreSQL:
apt-get install postgresql
На всякий случай обновите систему:
apt-get update apt-get upgrade
Кластеры
Внимание!!!
С этого момента в Debian работают два кластера PostgreSQL :
- СТАРЫЙ кластер (/etc/postgresql/11/main/postgresql.conf) работает на порту 5432
- НОВЫЙ кластер (/etc/postgresql/14/main/postgresql.conf) работает на порту 5433

Свежий конфигурационный файл «postgresql.conf» для 14 версии получает порт 5433. Это значит, что при активации 14 версии его нужно будет поправить на 5432. Если этого не сделать, то могут отвалиться подключения.
В операционной системе на одном порту может работать только один процесс. Разными портами разделяются кластеры. В результате разные версии СУБД могут иметь разные наборы баз данных. Но в нашем случае этого нет и мы просто хотим обновить СУБД на свежую версию со старыми базами.
Останавливаем сервер СУБД
systemctl stop postgresql
Обновление PostgreSQL до версии 14
Первое, что необходимо знать — это пути до системных каталогов:
- /etc/postgresql
- /var/lib/postgresql
- /usr/lib/postgresql
В этих каталогах хранятся все необходимые конфигурационные файлы и серверные приложения PostgreSQL.
Если вы под root пользователем, то смените его на пользователя postgres:
su - postgres
После этого вызовите команду обновления версии СУБД:
/usr/lib/postgresql/14/bin/pg_upgrade \ --old-datadir=/var/lib/postgresql/11/main \ --new-datadir=/var/lib/postgresql/14/main \ --old-bindir=/usr/lib/postgresql/11/bin \ --new-bindir=/usr/lib/postgresql/14/bin \ --old-options '-c config_file=/etc/postgresql/11/main/postgresql.conf' \ --new-options '-c config_file=/etc/postgresql/14/main/postgresql.conf'
Если процесс пойдёт не по плану и вы увидите надпись «Видимо, запущен процесс postmaster, обслуживающий старый кластер.«, тогда принудительно остановите процессы postmaster:
/usr/lib/postgresql/11/bin/pg_ctl stop --pgdata=/var/lib/postgresql/11/main --mode=fast /usr/lib/postgresql/14/bin/pg_ctl stop --pgdata=/var/lib/postgresql/14/main --mode=fast
(потом можете повторить предыдущий шаг)
Если процесс пойдёт не по плану и в этот раз, тогда проблема может быть в файле «pg_hba.conf» из директорий «/etc/postgresql/11/main» и «/etc/postgresql/14/main» соответственно. В 14 версии шифрование идёт через scram-sha-256 по умолчанию. В 11 версии используется md5.

Эта настройка влияет на то, как будут преобразованы прилетающие в СУБД пароли пользователей. Разные методы аутентификации будут выдавать разные итоговые значения при преобразования оригиналов паролей. Нужно просто исправить в файле для новой версии метод аутентификации на md5. После этого коннекты к СУБД наладятся.
Если в процессе обновления появятся ещё какие-то проблемы, тогда изучайте содержимое файла «pg_upgrade_server.log» из директории «/var/lib/postgresql«.
Стартуем новый кластер 14 версии и процесс postmaster
/usr/lib/postgresql/14/bin/pg_ctl start --pgdata=/etc/postgresql/14/main

Напоминаю, что к этому моменту новый кластер должен работать на порту 5432.
Запускаем сервер СУБД
systemctl start postgresql
Проверка состояний активности версий
Под postgres:
/usr/lib/postgresql/11/bin/pg_ctl status --pgdata=/var/lib/postgresql/11/main /usr/lib/postgresql/14/bin/pg_ctl status --pgdata=/var/lib/postgresql/14/main
В нашем случае должен быть активным 14 кластер.

Проверка версии сервера PostgreSQL из самой СУБД
SQL-команда:
SHOW server_version;

Удаление старого кластера
После успешного обновления можно удалить старую версию кластера из ОС.
./delete_old_cluster.sh
Перенос статистики оптимизатора запросов на новый кластер со старого
/usr/lib/postgresql/14/bin/vacuumdb --all --analyze-in-stages
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Серверное приложение pg_upgrade — https://postgrespro.ru/docs/postgresql/14/pgupgrade
Серверное приложение pg_ctl — https://postgrespro.ru/docs/postgresql/14/app-pg-ctl