Гид по технологиям

Установка и настройка PostgreSQL на CentOS

7 min read Базы данных Обновлено 07 Jan 2026
Установка PostgreSQL на CentOS — пошагово
Установка PostgreSQL на CentOS — пошагово

TL;DR

Кратко: этот подробный гид показывает, как установить и безопасно настроить PostgreSQL на CentOS, включая выбор версии, инициализацию, создание ролей и баз данных, базовый hardening и проверку работоспособности. Следуйте шагам, проверьте службу и настройте доступ для разработчиков и продакшн‑окружения.

Установка PostgreSQL на CentOS

PostgreSQL — надёжная и масштабируемая реляционная СУБД с поддержкой ACID‑транзакций, MVCC и журнала предзаписи (WAL). Подходит как для локальных серверов, так и для аналитических хранилищ. В этом материале вы найдёте пошаговую инструкцию установки на CentOS, советы по безопасности и эксплуатационные чеклисты.

Оглавление

  • Введение и требования
  • Как установить PostgreSQL в CentOS — пошагово
    • Шаг 1: Обновление системы
    • Шаг 2: Выбор/включение версии PostgreSQL
    • Шаг 3: Установка сервера и инициализация БД
    • Шаг 4: Конфигурация и запуск службы
    • Шаг 5: Создание ролей и баз данных
  • Безопасность и hardening
  • Частые проблемы и устранение неполадок
  • SOP / Плейбук для развёртывания
  • Критерии приёмки и тесты
  • Краткое резюме и полезные ссылки

Введение и требования

Короткое пояснение терминов:

  • ACID — набор гарантий для транзакций (целостность и согласованность).
  • MVCC — механизм многоверсионного контроля параллельного доступа.
  • WAL — журнал предзаписи для восстановления и репликации.

Требования:

  • Учетная запись с правами sudo или root.
  • Подключение к интернету для загрузки пакетов.
  • CentOS (Stream, 8, 7 и совместимые RHEL версии — нюансы ниже).

Важно: команды в инструкции предполагают работу в shell с правами администратора. Если вы используете контейнеры, облачные образы или управляемый хостинг, посмотрите раздел «Совместимость и миграция».

Как установить PostgreSQL в CentOS

CentOS может использовать dnf или yum в зависимости от версии. Ниже — последовательность из исходного материала, дополненная пояснениями и безопасными практиками.

Шаг 1: Обновление и обновление предустановленных пакетов

Переключитесь на root при необходимости:

su

Проверьте доступные обновления:

sudo yum check-update

Обновление пакетов в CentOS.jpg?q=50&fit=crop&w=825&dpr=1.5)

Обновите пакеты:

sudo yum update

После обновления перезагрузите систему, чтобы применились все системные обновления:

sudo reboot

Примечание: на CentOS Stream и новых релизах используйте dnf; команды yum обычно перенаправляют на dnf.

Шаг 2: Проверка и выбор версии PostgreSQL

Узнать модули PostgreSQL можно так:

dnf module list postgresql

Просмотр доступных модулей PostgreSQL.jpg?q=50&fit=crop&w=825&dpr=1.5)

По умолчанию модуль может указывать на старую версию (в исходном материале — версия 10). Чтобы использовать конкретную версию (пример: 13), включите модуль:

sudo dnf module enable postgresql:13

Включение модуля PostgreSQL 13

Альтернативный путь: использовать официальный репозиторий PostgreSQL (PGDG) если вам нужна версия, отсутствующая в модулях dnf. Для продакшна часто рекомендуют PGDG для получения новейших пакетов и патчей безопасности.

Когда версия выбрана, установите пакет сервера и клиентские утилиты.

Шаг 3: Установка пакета сервера PostgreSQL

sudo dnf install postgresql-server

Установка сервера PostgreSQL

Инициализируйте базу данных (создаст каталог данных и системные каталоги):

postgresql-setup --initdb

Инициализация базы данных PostgreSQL

После инициализации включите автозапуск службы и запустите её:

systemctl enable postgresql
systemctl start postgresql

Активация PostgreSQL при загрузке системы

Проверьте статус:

systemctl status postgresql

Если в выводе отображается Active, служба работает. Если нет — смотрите раздел устранения неполадок.

Шаг 4: Базовая конфигурация PostgreSQL

Установите пароль для системного пользователя postgres:

passwd postgres

Смена пароля системного пользователя postgres

Затем переключитесь на системную учётную запись postgres для выполнения администрирования:

su - postgres

Файлы конфигурации, которые вы будете править:

  • /var/lib/pgsql/data/postgresql.conf — основные параметры сервера (порт, listen_addresses, настройки буферов)
  • /var/lib/pgsql/data/pg_hba.conf — правила аутентификации и доступа

Пример: разрешить удалённые подключения (внимательно с безопасностью):

  1. В postgresql.conf найти и изменить:
listen_addresses = 'localhost'  -- изменить на '*' или конкретный IP
  1. В pg_hba.conf добавить строку для IPv4 подключения по паролю (пример):
# host    database    user    address         method
host      all         all     192.168.0.0/24  md5

После правок перезагрузите службу:

systemctl restart postgresql

Важно: при открытии listen_addresses убедитесь, что файрвол не пропускает трафик на порт 5432 посторонним пользователям.

Шаг 5: Создание роли пользователя и базы данных

Создать роль интерактивно можно так:

createuser --interactive

Если вы не хотите переходить в postgres‑учётку:

sudo -u postgres createuser --interactive

Создание новой роли PostgreSQL

Рекомендация: сделайте роли с наименьшими правами, дающими доступ только к нужным базам или схемам. Для паролей используйте команду psql:

psql -c "ALTER ROLE username WITH PASSWORD 'secure_password';"

Создать системного пользователя (OS) под имя роли (если требуется):

sudo adduser test
sudo -i -u test

Создать базу данных:

createdb databasename

Пример создания таблицы (через psql):

CREATE TABLE hotel (
  hotel_id serial PRIMARY KEY,
  star varchar(50) NOT NULL,
  paint varchar(25) NOT NULL,
  location varchar(25) CHECK (location in ('north','south','west','east','northeast','southeast','southwest','northwest')),
  date date
);

Добавление данных:

INSERT INTO hotel (hotel_id, star, paint, location, date) VALUES (DEFAULT, 'Five', 'Blue', 'northwest', '2018-08-16');

Примечание: подгоняйте имена полей и типы данных под реальные требования приложений.

Безопасность и hardening

Важно минимизировать поверхность атаки перед выпуском в продакшн:

  • Ограничьте listen_addresses до конкретных IP, если возможно.
  • В pg_hba.conf используйте trust только для локальных административных каналов; для сетевых подключений — md5 или лучше scram-sha-256.
  • Включите шифрование паролей SCRAM (если поддерживается версией сервера) и обновите роли: ALTER ROLE … ENCRYPTED PASSWORD.
  • Настройте бэкапы (pg_basebackup, pg_dump/pg_dumpall) и проверьте восстановление на тестовом сервере.
  • Настройте мониторинг состояния диска, I/O и задержек записи WAL.
  • Ограничьте доступ через файрвол: открыть порт 5432 только для доверенных адресов.

Пример команды firewall-cmd (CentOS 7/8):

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="5432" accept'
sudo firewall-cmd --reload

SELinux: если включён, возможны блокировки доступа к файловой системе данных. При проблемах смотрите журнал audit.log и используйте audit2allow.

Частые проблемы и устранение неполадок

  1. Служба не стартует:
    • Просмотрите логи: journalctl -u postgresql -b
    • Проверяйте права на каталог данных и владельца (обычно postgres:postgres).
  2. Ошибки инициализации:
    • Убедитесь, что каталог данных пуст и у процесса есть доступ.
  3. Проблемы с подключением удалённо:
    • Проверьте listen_addresses, pg_hba.conf, firewall и SELinux.
  4. Производительность:
    • Проверьте настройки shared_buffers, work_mem, wal_buffers и autovacuum.

Важно: перед внесением изменений в production храните резервную копию конфигураций.

SOP / Плейбук для развёртывания PostgreSQL на сервере

Шаги «быстрой установки»:

  1. Подготовка ОС: обновить пакеты и перезагрузить.
  2. Выбрать версию PostgreSQL (dnf module или PGDG).
  3. Установить postgresql-server и инициализировать базу.
  4. Запустить и включить службу systemctl.
  5. Установить пароль для системного пользователя postgres.
  6. Создать роли и базы данных согласно требованиям приложения.
  7. Настроить pg_hba.conf и postgresql.conf, перезагрузить.
  8. Настроить файрвол и SELinux (при необходимости).
  9. Настроить регулярные бэкапы и проверку восстановления.
  10. Внедрить мониторинг и алертинг (например, проверка службы и задержек WAL).

Резервное копирование (кратко):

  • Используйте pg_dump для логических дампов или pg_basebackup для физической реплики.

Критерии приёмки

Минимальные проверки перед переходом в продакшн:

  • Служба PostgreSQL запущена и активна.
  • Учетная запись postgres имеет надёжный пароль.
  • Создана тестовая база и таблица, можно выполнить INSERT/SELECT.
  • Настроены бэкапы и проверено восстановление на тестовом хосте.
  • Файрвол закрывает порт 5432 для неавторизованных источников.
  • Мониторинг собирает метрики доступности и задержек.

Пример тестов (см. раздел Тесты): запустить psql и выполнить простые SQL‑команды.

Тесты и критерии приёмки (acceptance)

  1. Проверка статуса службы:
systemctl is-active postgresql
# ожидается: active
  1. Проверка подключения локально:
sudo -u postgres psql -c "SELECT version();"
  1. Создать базу, таблицу, вставить и выбрать:
createdb testdb
psql -d testdb -c "CREATE TABLE t(id serial PRIMARY KEY, v text);"
psql -d testdb -c "INSERT INTO t(v) VALUES('ok');"
psql -d testdb -c "SELECT * FROM t;"

Успешный результат — строка с ‘ok’.

Совместимость и миграция

  • CentOS 7 использует sysvinit/systemd и может иметь старые модули; CentOS 8/Stream — dnf modules.
  • При переходе между мажорными версиями PostgreSQL используйте pg_upgrade или logical dump/restore (pg_dump/pg_restore) — pg_upgrade быстрее, но требует совместимости форматов.
  • Если вы используете сторонние модули (расширения), проверьте их совместимость с целевой версией PostgreSQL.

Шаблоны и чек-листы (быстрый доступ)

Чек-лист администратора перед релизом:

  • Обновления ОС применены и сервер перезагружён
  • Версия PostgreSQL подтверждена
  • Данные и каталоги имеют владельца postgres
  • Пароли ролей заданы и безопасны
  • Файрвол и SELinux настроены
  • Бэкапы настроены и проверены
  • Мониторинг и алерты активны

Чек-лист разработчика для локального окружения:

  • Локальный postgres доступен на 5432
  • Создана тестовая база данных
  • Миграции успешно применяются

Факты и модели принятия решений

Факт‑бокс:

  • PostgreSQL — транзакционная СУБД с поддержкой ACID и MVCC.
  • Порт по умолчанию: 5432.
  • Основные файлы конфигурации: postgresql.conf, pg_hba.conf.

Модель принятия решения о выборе версии:

  • Нужны последние фичи/оптимизации → используйте PGDG или последние модули dnf.
  • Нужна максимальная стабильность → выберите LTS‑версию, протестированную в вашей среде.

Глоссарий (строчно)

  • СУБД: система управления базами данных.
  • ROLE: учетная запись/роль в PostgreSQL, объединяющая права.
  • WAL: журнал предзаписи — ключ для восстановления и репликации.

Заключение

Этот материал даёт полный набор шагов для установки PostgreSQL на CentOS — от обновления системы до создания ролей, баз и базового hardening. Для продакшн‑окружения добавьте мониторинг, регулярные бэкапы и проверку восстановления. Если вам требуется миграция между версиями — планируйте тестовую процедуру с pg_upgrade или дамп/восстановление.

Важно

  • Всегда тестируйте обновления и миграции на копии данных.
  • Не открывайте порт 5432 публично без VPN или TLS‑туннеля.

Примечание

Если вы используете управляемые сервисы (RDS, Cloud SQL), большинство шагов по установке можно пропустить — но принципы конфигурации и безопасности остаются актуальными.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство