Гайды
PostgreSQL 17: установка и настройка на Ubuntu и Windows
Официальный репозиторий на Ubuntu 24.04, установщик на Windows, postgresql.conf и pg_hba.conf, удалённый доступ, мониторинг и бэкапы.
~14 мин чтения
PostgreSQL 17: установка и настройка
Важно: PostgreSQL 17 — актуальная мажорная версия с заметными улучшениями производительности и мониторинга: лучше работает
JSON_TABLE, командаCOPYускорена для длинных строк (до ~2× на больших строках), вpg_basebackupпоявилось инкрементальное резервное копирование, а потребление памяти приVACUUMна тяжёлых таблицах может снижаться заметнее.
Установка на Ubuntu 24.04 LTS (официальный репозиторий PGDG)
В стандартном репозитории Ubuntu часто лежит более старая версия PostgreSQL, поэтому подключаем официальный репозиторий проекта — так вы получаете актуальные патчи безопасности.
1. Репозиторий и ключи
sudo apt update
sudo apt install -y curl ca-certificates
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
2. Установка сервера и клиента
sudo apt install -y postgresql-17 postgresql-client-17
3. Проверка сервиса
sudo systemctl status postgresql
Если сервис не активен:
sudo systemctl enable --now postgresql
Установка на Windows
- Откройте postgresql.org/download/windows → Download → Windows → установщик под вашу разрядность (обычно x86-64).
- Запустите
.exeи разрешите изменения в системе. - Installation directory — по умолчанию
C:\Program Files\PostgreSQL\17. - Data directory — каталог данных (можно оставить по умолчанию).
- Password — надёжный пароль суперпользователя
postgres(запомните его; это критично для админ-доступа). - Port —
5432, если свободен; иначе выберите другой и запомните его для приложений. - Locale — по умолчанию или нужная локаль.
- Завершите мастер. Stack Builder можно отключить, если дополнительные компоненты не нужны.
Файлы конфигурации: postgresql.conf и pg_hba.conf
На Linux типичный путь: /etc/postgresql/17/main/. На Windows — в каталоге данных, который вы указали при установке.
| Файл | Назначение |
|---|---|
postgresql.conf | Порт, память, логирование, WAL, autovacuum и т.д. |
pg_hba.conf | Кто и откуда может подключаться и какой метод аутентификации |
Полезные параметры в postgresql.conf на старте:
listen_addresses— по умолчанию часто толькоlocalhost; для удалённых подключений нужен'*'(только вместе с фаерволом и осознанными правилами вpg_hba.conf).port— обычно5432.shared_buffers— кэш страниц (часто 15–25% RAM как отправная точка для dedicated-сервера; дальше — по профилю OLTP/DW).max_connections— лимит одновременных подключений; на высоконагруженных системах почти всегда сочетают с пулером (pgBouncer), иначе вы упираетесь в накладные расходы на тысячи коннектов.
Пример фрагмента pg_hba.conf (иллюстративно; под вашу сеть сужайте маски):
local all postgres peer
local all all peer
host all all 127.0.0.1/32 scram-sha-256
Для доступа извне предпочтительнее SCRAM-SHA-256 вместо устаревшего md5, если клиенты поддерживают. Открывать 0.0.0.0/0 без VPN/бастиона — плохая практика; лучше whitelist по IP или приватная сеть.
Удалённый доступ и аутентификация (Linux)
По умолчанию PostgreSQL на Linux часто использует peer для локальных сокетов — это удобно для админа, но для удалённых клиентов нужны явные правила.
1. postgresql.conf
sudo nano /etc/postgresql/17/main/postgresql.conf
Если действительно нужны подключения не только с localhost:
listen_addresses = '*'
2. pg_hba.conf
sudo nano /etc/postgresql/17/main/pg_hba.conf
Добавьте в конец правило для вашей подсети, например офис или VPC:
host all all 10.0.0.0/8 scram-sha-256
Для быстрого теста (не для продакшена) иногда встречают 0.0.0.0/0 — делайте это только временно и с жёстким фаерволом.
3. Фаервол
Пример ufw:
sudo ufw allow 5432/tcp
sudo ufw reload
4. Применение
sudo systemctl restart postgresql
Мониторинг и тюнинг
- Медленные запросы — в
postgresql.conf:
log_min_duration_statement = 200
Логирует запросы дольше 200 мс (порог подберите под проект; на шумных системах начните выше).
-
pg_stat_statements— расширение для агрегированной статистики по нормализованным текстам запросов. Требует строку вshared_preload_librariesиCREATE EXTENSION pg_stat_statements;в нужной базе. -
Внешние дашборды — Prometheus + Grafana, Percona PMM и аналоги для трендов и алертов.
-
Генераторы конфигов —
pgtune, PGConfigurator: хорошая отправная точка, затем валидация на стенде под реальную нагрузку и железо.
Резервное копирование и репликация
Логический дамп (pg_dump)
Кроссплатформенно, удобно для отдельных баз и миграций:
pg_dump -U postgres -d mydb -F c -b -v -f mydb.dump
Восстановление через pg_restore. Для больших объёмов учитывайте время простоя или используйте параллельные режимы там, где это уместно.
Физический бэкап (pg_basebackup)
Быстрый снимок кластера, основа для реплик и PITR вместе с архивацией WAL:
pg_basebackup -U postgres -D /backup/base/ -Fp -Xs -P
В PostgreSQL 17 обратите внимание на возможности инкрементальных бэкапов в pg_basebackup — это снижает объём передаваемых данных между полными снимками. В проде часто автоматизируют через pgBackRest и политики RPO/RTO.
Репликация master → replica (потоковая)
На мастере в postgresql.conf:
wal_level = replica
max_wal_senders = 10
В pg_hba.conf разрешите репликацию с IP реплики (пример):
host replication postgres 10.0.0.5/32 scram-sha-256
На реплике — остановите инстанс при необходимости, подготовьте каталог данных и выполните базовый бэкап:
pg_basebackup -h <IP_мастера> -D /var/lib/postgresql/17/main/ -U postgres -v -P --wal-method=stream
Создайте файл standby.signal в каталоге данных и укажите в postgresql.auto.conf или postgresql.conf параметр primary_conninfo на мастер. Детали зависят от layout каталогов и версии — сверяйтесь с официальной документацией по высокой доступности.
Частые ошибки
| Симптом | Что проверить |
|---|---|
FATAL: no pg_hba.conf entry for host | Строка в pg_hba.conf для вашего IP/подсети и метод auth; затем reload/restart. |
Не стартует после правки postgresql.conf | Синтаксис и лог: journalctl -u postgresql или файл лога в /var/log/postgresql/. |
too many clients already | max_connections, пул соединений (pgBouncer), утечки коннектов в приложении. |
Итог
- На Ubuntu — репозиторий PGDG, пакеты
postgresql-17, проверкаsystemctl. - На Windows — инсталлятор, пароль
postgres, порт и data directory. - Безопасный удалённый доступ —
listen_addresses,pg_hba.conf, SCRAM, фаервол и минимизация поверхности атаки. - Мониторинг и бэкапы — логи,
pg_stat_statements, дампы и/или физические бэкапы под ваши RPO/RTO.
Дальше логично перейти к гайду по индексам и партиционированию в этом же разделе Learn.