Обновить настройки cookies

Обновление PostgreSQL 12 до 14-ой версии на Ubuntu 20.04

25 Jun 2025, 17:19:59
Мы разберём процесс обновления СУБД PostgreSQL 12, которая в Ubuntu 20.04 поставляется в официальном репозитории, до PostgreSQL 14 простым и удобным способом, с сохранением всех баз данных. PostgreSQL 14 - более безопасная и производительная версия, имеющая поддержку параллельных вложенных циклов (nested loop joins), multirange-типов. Получившая ряд существенных оптимизаций и улучшений: более эффективный параллельный выбор данных, улучшено планирование параллельных запросов, оптимизирована сортировка, повышена производительность ARRAY, JSON, агрегатных функций и многое другое.

Подготовка к обновлению

Все приведённые в статье команды выполняются на сервере под пользователем root.
Убедимся, что у нас запущена и работает PostgreSQL 12 с помощью команды:
pg_lsclustersКоманда покажет список кластеров (серверов) PostgreSQL, установленных на вашем устройстве.
Вполне нормальная ситуация, что у вас он пока один, как в примере:
20250625_kKWMd0PM
Видим версию (12) и имя кластера, порт, а также его статус - online. Значит можем приступить к созданию полного дампа данных СУБД.

Создание полного дампа PostgreSQL

Для создания полного дампа баз данных, пользователей, прав и схем текущей СУБД PostgreSQL нам необходимо воспользоваться утилитой pg_dumpall от имени пользователя postgres из домашней директории пользователя:
cd /var/lib/postgresql
sudo -u postgres pg_dumpall > all_databases.sql
Создание полного дампа может занять некоторое время, в зависимости от объёма ваших баз. В результате вы получите файл all_databases.sql, который подстрахует вас в случае проблем.
20250625_glsOk0XT
Восстановить этот дамп можно с помощью команды, находясь в той же директории:
sudo -u postgres psql -f all_databases.sql
  • -u postgres - пользователь, от имени которого выполняется команда;
  • -f all_databases.sql - путь до файла дампа (в примере файл all_databases.sql находится в директории запуска команды).

Установка PostgreSQL 14

По умолчанию в Ubuntu 20.04 нет репозитория PostgreSQL. Добавим его.
Для начала установим необходимый софт:
apt install -y wget gnupg2 lsb-releaseДобавляем сам репозиторий PostgreSQL:
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | tee /etc/apt/sources.list.d/pgdg.listДобавляем GPG-ключ репозитория:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -Получаем успешный ответ:
20250625_vCdfus94
Приступаем к обновлению списка пакетов и самой установке PostgreSQL 14:
apt update
apt install postgresql-14 postgresql-server-dev-14
После установки мы можем проверить список кластеров в нашей системе и не увидеть там изменений, однако это нормально.

Обновление PostgreSQL 12 до PostgreSQL 14

Воспользуемся утилитой pg_upgradecluster, которая полностью автоматизирует процесс обновления PostgreSQL. Данная утилита копирует данные из старой версии PostgreSQL, обновляет конфигурации, запускает новый кластер PostgreSQL 14 на порту старого, старый при этом останавливает. В результате её работы вы должны получить новую версию СУБД, которая полностью заменит собой старую, без каких-либо потерь.
Остановим работу PostgreSQL:
systemctl stop postgresqlЗапускаем утилиту автоматического обновления:
pg_upgradecluster 12 mainПолучаем длинный вывод информирующий о работе утилиты и в конце информацию об успешном запуске нового кластера PostgreSQL 14:
20250625_jTjNWVib
Однако так бывает не всегда. Очень часто на Ubuntu можно получить ошибку perl: warning: Setting locale failed. Даже если локали уже настроены:
20250625_21MAj9oj
Это происходит из-за переменной окружения LC_CTYPE. Указываем ей корректное значение и с запускаем pg_upgradecluster снова:
export LC_CTYPE="en_US.UTF-8Процесс обновления успешно запущен:
20250625_ufwgeRew
Проверяем список кластеров PostgreSQL в нашей системе:
pg_lsclustersИ видим, что старый кластер версии 12 имеет статус down и новый порт, а на его месте работает новый, версии 14:
20250625_0aZXhkoH
Проверить текущую версию PostgreSQL можно командой:
sudo -u postgres psql -c "SELECT version();"Получаем полную информацию о версии СУБД:
20250625_mMctQuUN
После того как мы убедились в работоспособности новой версии PostgreSQL, можно удалить кластер версии 12, как подсказывала pg_upgradecluster ранее, если это необходимо:
pg_dropcluster 12 mainВ итоге на сервере остаётся актуальная версия PostgreSQL 14 со всеми базами и пользователями:
20250625_luEOs48r
Обновление PostgreSQL 12 до 14-ой версии в Ubuntu 20.04 — несложная задача, благодаря инструменту для автоматического обновления pg_upgradecluster. Следуя этому руководству, вы всего за пару команд сможете обновить СУБД самостоятельно. Если у вас возникли трудности с обновлением PostgreSQL на наших VPS и выделенных серверах, вы всегда можете обратиться к нам в техническую поддержку в онлайн-чат или через систему тикетов.

VPS в Нидерландах

Смотреть конфигурации

Премиум выделенные серверы

Смотреть конфигурации