Мы подготовили подробное руководство по установке и настройке PostgreSQL на Ubuntu 22.04.

В статье — три варианта установки: из стандартного репозитория, из официального репозитория разработчиков и через Docker. Вы узнаете, как включить современную аутентификацию, создать пользователя и базу данных, подключить расширения и настроить сетевой доступ.

Если вы работаете с данными — будь то высоконагруженный веб-сервис, аналитическая платформа или даже геоинформационная система, — PostgreSQL станет отличным выбором. Эта СУБД не просто хранит информацию: она гарантирует целостность транзакций даже при миллионах запросов в минуту, поддерживает сложные типы данных (например, JSONB или геометрические объекты через PostGIS) и её можно настраивать под любые, даже самые необычные, сценарии. А ещё PostgreSQL распространяется бесплатно и имеет открытый исходный код, что делает её фаворитом среди разработчиков, DevOps-инженеров и администраторов баз данных.
Разберём, как установить PostgreSQL на Ubuntu 22.04, в том числе на VPS, настроить параметры для оптимизации производительности и избежать типичных ошибок.
Вы узнаете не только как запустить сервер, но и как:
- Настроить аутентификацию через scram-sha-256 вместо устаревшего md5.
- Разрешить удалённые подключения без риска для безопасности.
- Подключить расширения.
- Оптимизировать работу с индексами и кешированием под вашу нагрузку.
Установка PostgreSQL на Ubuntu 22.04: все способы и подводные камни

Установить PostgreSQL на Ubuntu можно несколькими методами, и выбор зависит от ваших задач. Разберём три ключевых подхода: стандартный репозиторий Ubuntu (просто, но версия может быть не самой свежей), официальный репозиторий PostgreSQL (актуальные версии) и Docker (для изоляции окружения).
Для каждого варианта — свой способ установки.
Установка из стандартного репозитория Ubuntu (простой способ)
Если вам не нужна последняя версия PostgreSQL и важна стабильность:
sudo apt update && sudo apt upgrade -y
sudo apt install postgresql postgresql-contrib -y
Что происходит при выполнении этих команд:
- sudo apt update — обновляет локальный список пакетов, чтобы система «видела» актуальные версии ПО;
- sudo apt upgrade -y — обновляет уже установленные пакеты (-y автоматически подтверждает действие, чтобы не ждать ввода);
- postgresql — основной пакет СУБД;
- postgresql-contrib — дополнительные модули (например, pgcrypto для шифрования или uuid-ossp для генерации UUID).
Плюсы такой установки — минимум действий и полная интеграция с системными сервисами. Минус — версия PostgreSQL может быть устаревшей (например, Ubuntu 22.04 по умолчанию предлагает PostgreSQL 14).
Установка из официального репозитория PostgreSQL (актуальные версии)
Для работы с PostgreSQL 16 или 17 (последние LTS-релизы на момент публикации) установите СУБД из репозитория разработчиков.
Шаг 1. Добавление репозитория
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/pgdg.asc
sudo apt update
Пояснения:
- lsb_release -cs — возвращает кодовое имя дистрибутива (например, jammy для Ubuntu 22.04);
- wget -qO- — загружает ключ репозитория без вывода логов (-q) и передаёт его в stdout (-O-);
- sudo tee — записывает вывод в файл с правами суперпользователя.
Шаг 2. Установка PostgreSQL
sudo apt install postgresql-16 postgresql-client-16 postgresql-contrib -y
Что устанавливается:
- postgresql-16 — сервер PostgreSQL версии 16;
- postgresql-client-16 — клиентские утилиты (например, psql);
- postgresql-contrib — дополнительные расширения.
Если вам нужны специфичные модули (например, PostGIS для геоданных), добавьте их отдельно:
sudo apt install postgresql-16-postgis-3
Установка через Docker (для изолированных сред)
Если вы предпочитаете контейнеры:
docker run --name postgres-16 \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=Secret123! \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-v /path/to/data:/var/lib/postgresql/data \
-d postgres:16
Разбор параметров:
- --name postgres-16 — имя контейнера (его можно изменить);
- -e — переменные окружения;
- POSTGRES_USER — суперпользователь БД;
- POSTGRES_PASSWORD — его пароль;
- POSTGRES_DB — база данных, создаваемая при старте;
- -p 5432:5432 — проброс порта (хост:контейнер);
- -v /path/to/data:/var/lib/postgresql/data — монтирование тома для сохранения данных;
- -d — запуск в фоновом режиме (detached).
Плюсы — изоляция от основной системы и лёгкое обновление до новых версий. Минус — требуется настройка резервного копирования тома.
Проверка установки
Независимо от метода, проверьте статус службы:
sudo systemctl status postgresql
В выводе ищите Active: active (running) — это значит, что служба работает.
Если статус — inactive, проверьте логи:
sudo journalctl -u postgresql@16-main -xe
Настройка PostgreSQL: аутентификация, пользователи и оптимизация под нагрузку
После успешной установки PostgreSQL наступает этап настройки — именно здесь закладывается фундамент безопасности и производительности вашей базы данных. Даже небольшие ошибки на этом этапе могут привести к утечкам информации или замедлению работы системы. Разберёмся, как избежать таких проблем.
Создание пользователя и базы данных через psql
Для PostgreSQL уже есть учётная запись postgres, созданная по умолчанию. Но не используйте её в продакшене — это всё равно что оставить ключи от сейфа на видном месте. Поэтому первое, что нужно сделать после установки — создать отдельного пользователя и базу данных.
Подключитесь к серверу под встроенным пользователем postgres:
sudo -u postgres psql
Так, sudo -u postgres запускает psql от имени postgres, что необходимо для доступа к СУБД.
В консоли PostgreSQL:
CREATE USER myuser WITH PASSWORD 'СложныйПароль!123' VALID UNTIL '2026-01-01';
CREATE DATABASE mydb OWNER myuser ENCODING 'UTF8' LC_COLLATE 'ru_RU.UTF-8';
\connect mydb
Что мы сделали:
- CREATE USER — создаёт пользователя с паролем, который истечёт 1 января 2026 года (VALID UNTIL). Это вынуждает регулярно обновлять пароли;
- ENCODING 'UTF8' — устанавливает кодировку UTF-8 для корректной работы с русским языком;
- LC_COLLATE 'ru_RU.UTF-8' — задаёт правила сортировки для русского языка (важно для поиска и индексов).
PostgreSQL 16 и 17 по умолчанию используют аутентификацию scram-sha-256 — более безопасную схему, чем устаревший MD5. Убедитесь, что в пароле есть буквы в разных регистрах, цифры и спецсимволы.
Конфигурационный файл pg_hba.conf: кто, откуда и как может подключаться
Файл pg_hba.conf (Host-Based Authentication) — это «пропускной пункт» вашей СУБД. Находится он в:
/etc/postgresql/16/main/pg_hba.conf
Версия может отличаться. Откройте его:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Допустим, мы хотим разрешить локальные подключения без пароля для админов и разрешить удалённый доступ только с определённых IP с шифрованием. Для этого добавьте в конец файла:
# TYPE | DATABASE | USER | ADDRESS | METHOD |
local | all | postgres | peer | |
hostssl | mydb | myuser | 192.168.1.0/24 | scram-sha-256 |
Расшифровка:
- local — подключение через Unix-сокет;
- peer — аутентификация через системного пользователя (только для local);
- hostssl — разрешает только SSL-подключения;
- 192.168.1.0/24 — диапазон доверенных IP-адресов;
- scram-sha-256 — обязательное использование современного метода шифрования.
Если ваш сервер в публичной сети, замените 192.168.1.0/24 на конкретные IP или используйте VPN.
После изменений перезагрузите PostgreSQL:
sudo systemctl reload postgresql
Ошибка в pg_hba.conf приведёт к отказу сервера — всегда проверяйте синтаксис через pg_ctl перед перезагрузкой:
sudo -u postgres pg_ctl -D /var/lib/postgresql/16/main/ reload -t 5
Если в конфигурации есть ошибки — они будут выведены в консоль, изменения не применятся, а PostgreSQL продолжит работать со старыми настройками.
Файл postgresql.conf: оптимизируем СУБД под нагрузку
Основной конфигурационный файл находится в /etc/postgresql/16/main/postgresql.conf. Откройте его и настройте ключевые параметры:
listen_addresses = '*' # Разрешаем удалённые подключения
shared_buffers = 4GB # 25% от общей RAM (но не более 8GB)
work_mem = 64MB # Оперативная память на каждую операцию сортировки/хеширования
maintenance_work_mem = 1GB # Для VACUUM и создания индексов
effective_cache_size = 12GB # 50-75% от RAM
synchronous_commit = off # Для высоких нагрузок (но есть риск потери данных при сбое!)
wal_level = replica # Для репликации и Point-in-Time Recovery
Пояснения:
- shared_buffers — кеш данных в RAM. Для сервера с 16GB RAM оптимально 4GB;
- work_mem — завышение этого параметра приводит к своппингу, поэтому начинайте с 32-64MB. Также чем больше максимальное количество одновременных соединений, тем меньше должен быть work_mem;
- synchronous_commit = off — ускоряет запись, но при сбое можно потерять данные.
Docker: как не потерять данные при обновлении
После изменения конфига выполните не restart, а reload, чтобы не прерывать активные соединения:
sudo systemctl reload postgresql
Если вы выбрали установку через Docker, помните, что контейнеры — это временные среды. Все данные хранятся в томах, и их нужно регулярно создавать бекапы.
Создайте резервную копию:
docker exec -t postgres-16 pg_dumpall -U admin > backup.sql
Для автоматизации добавьте задание в cron:
0 3 * * * docker exec -t postgres-16 pg_dumpall -U admin | gzip > /backups/pg_$(date +\%Y-\%m-\%d).sql.gz
Что это даёт:
- ежедневный бекап в 3:00;
- сжатие через gzip для экономии места;
- имена файлов с датами для удобства.
Главное правило: храните бекапы не на том же сервере, а в облаке (например, Yandex Cloud) или на отдельном физическом носителе.
Заключение
Теперь вы знаете, как установить PostgreSQL на сервер с Ubuntu 22.04 и подготовить СУБД к работе: защитить базы данных современной аутентификацией, оптимизировать параметры под нагрузку, настроить фильтрацию подключений через pg_hba.conf. Но это только начало — также необходимо настроить репликацию, чтобы данные не пропали при сбое, внедрить мониторинг через Prometheus и Grafana для отслеживания медленных запросов и использовать EXPLAIN ANALYZE, чтобы находить «узкие места» в логике приложений.
Не забывайте, что даже идеально настроенная СУБД требует внимания: регулярно обновляйте PostgreSQL, запускайте VACUUM для очистки «мёртвых» строк и анализируйте статистику использования индексов.
Читайте в блоге:
- Ошибка в ядре Linux едва не обрушила производительность Nginx и PostgreSQL
- Как установить PostgreSQL на Linux: пошаговая инструкция
- Простая инструкция по установке PostgreSQL на Windows