Установка и базовое использование PostgreSQL 15 на Rocky Linux 9
- Кратко: установите официальный репозиторий PostgreSQL, установите пакет postgresql15-server, инициализируйте кластер, включите службу и настройте аутентификацию через pg_hba.conf (рекомендуется scram-sha-256). Этот гид показывает шаги от установки до создания пользователей, баз данных, таблиц, резервного копирования и базовой отладки.
Введение

PostgreSQL — свободная реляционная СУБД с сильной ориентацией на расширяемость и соответствие SQL-стандартам. Это корпоративного уровня RDBMS, который поддерживает как SQL-запросы, так и работу с JSON. Сообщество развивает PostgreSQL более 20 лет; он широко используется в веб-, мобильных и аналитических приложениях.
Этот подробный материал проведёт вас через установку PostgreSQL 15 на сервере Rocky Linux 9 и покажет базовые приёмы: создание ролей и баз данных, работу с таблицами, вставку и выборку данных, резервное копирование и основные приёмы безопасности.
Важно: все команды в гайде предполагают, что у вас есть пользователь с sudo-привилегиями и SELinux установлен в режиме permissive (разрешающий). Если SELinux в enforcing, в разделе безопасности есть заметки по настройке.
Что вы получите из этого руководства
- Пошаговая установка PostgreSQL 15 из официального репозитория.
- Инициализация кластера, запуск и автозапуск службы.
- Настройка аутентификации и шифрования паролей (scram-sha-256).
- Создание ролей и баз данных, примеры DDL и DML.
- Резервное копирование и восстановление (pg_dump/pg_restore).
- Базовые операции обслуживания: VACUUM, ANALYZE.
- Чек-листы и playbook для развертывания и отката.
Основные термины (в одну строку)
- Роль: аккаунт в PostgreSQL, похож на пользователя или группу.
- Кластер: набор баз данных, обслуживаемый одним экземпляром сервера PostgreSQL.
- Служба: системный unit systemd, управляющий процессом postmaster.
- pg_hba.conf: файл контроля доступа для клиентских соединений.
Предварительные требования
- Сервер Rocky Linux 9 с сетевым доступом.
- Пользователь с sudo.
- SELinux в режиме permissive (или дополнительные настройки, если enforcing).
- Свободное место и права для установки пакетов.
1. Добавление официального репозитория PostgreSQL
PostgreSQL 15 может отсутствовать в стандартном репозитории Rocky Linux. Используйте официальный репозиторий PostgreSQL для RHEL 9-совместимых дистрибутивов.
Выполните:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpmПосле установки репозитория можно проверить список доступных репозиториев:
sudo dnf repolist

Совет: если у вас ограничённый доступ в интернет, скачайте rpm и перенесите его на сервер через SCP.
2. Установка PostgreSQL 15
Установите сервер и дополнительные contrib-модули:
sudo dnf install postgresql15-server postgresql15-contribПодтвердите импорт GPG-ключей репозитория, если будет запрос.

Инициализируйте базу данных (создание папки данных и начальной конфигурации):
sudo postgresql-15-setup initdbЗапустите и включите службу:
sudo systemctl start postgresql-15
sudo systemctl enable postgresql-15Проверьте статус:
sudo systemctl status postgresql-15

Если служба не запускается, проверьте журналы systemd:
sudo journalctl -u postgresql-15 --no-pagerИщите ошибки о правах доступа к каталогу данных или конфликте портов (обычно 5432).
3. SELinux и брандмауэр
Если SELinux в режиме enforcing, проверьте метки для каталога данных и портов. Простейшая команда для установки метки порта (если меняли порт):
sudo semanage port -a -t postgresql_port_t -p tcp 5432Если semanage отсутствует, установите policycoreutils-python-utils:
sudo dnf install -y policycoreutils-python-utilsОткрытие порта в firewalld:
sudo firewall-cmd --add-service=postgresql --permanent
sudo firewall-cmd --reloadЕсли используете ufw или другой брандмауэр, настройте аналогично.
Важно: не оставляйте порт 5432 открытым в интернет без надёжной аутентификации и TLS.
4. Настройка аутентификации и шифрования паролей
По умолчанию PostgreSQL использует файл pg_hba.conf для контроля доступа. Вход в psql от системного пользователя postgres:
sudo -u postgres psqlВнутри psql проверьте расположение файла и текущую схему шифрования паролей:
SHOW hba_file;
SHOW password_encryption;Вы увидите путь, обычно ‘/var/lib/pgsql/15/data/pg_hba.conf’, и метод шифрования (рекомендуется scram-sha-256).

Откройте файл для редактирования:
sudo nano /var/lib/pgsql/15/data/pg_hba.confПример рекомендуемых строк для локальных соединений:
# Unix-сокеты
local all all peer
# IPv4 локальные
host all all 127.0.0.1/32 scram-sha-256
# IPv6 локальные
host all all ::1/128 scram-sha-256Сохраните и перезапустите сервер:
sudo systemctl restart postgresql-15Проверка соединения по socket и по TCP (127.0.0.1):
sudo -u postgres psql
\conninfo
sudo -u postgres psql -U postgres -h 127.0.0.1
\conninfo
Примечание: peer означает, что PostgreSQL проверяет UNIX-пользователя ОС. Для удалённых подключений всегда используйте метод md5 или scram-sha-256; последний более безопасен.
5. Установка пароля пользователю postgres
Сначала задайте пароль для системного пользователя postgres (UNIX):
sudo passwd postgresЗатем внутри psql установите пароль для роли postgres (PostgreSQL-сущность):
sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'ваш_надёжный_пароль';
\qПример в оригинале использовал ‘p4ssw0rdPostgreSQL15’ — используйте уникальные и сложные пароли.

Подключитесь по TCP с указанием пользователя и хоста для проверки:
sudo -u postgres psql -U postgres -h 127.0.0.16. Создание новой роли и базы данных
Выполните вход как postgres:
sudo -u postgres psqlСоздадим роль alice с правами создавать базы и роли:
CREATE USER alice WITH CREATEDB CREATEROLE PASSWORD 'p4ssw0rdAlice';Создадим базы alice и testdb, владельцем назначим alice:
CREATE DATABASE alice OWNER alice;
CREATE DATABASE testdb OWNER alice;Проверьте роли и базы:
\du
\l
Подключение как alice (через 127.0.0.1):
sudo -u postgres psql -U alice -h 127.0.0.1
\conninfo
Совет: не давайте CREATEROLE большинству пользователей. Это высокая привилегия.
7. Создание таблицы и вставка данных
Подключившись к базе testdb как alice:
\connect testdbСоздадим таблицу users с простыми типами и первичным ключом:
CREATE TABLE users (
id INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
age INT NOT NULL,
address CHAR(50),
salary REAL
);Проверьте таблицы:
\dt
Вставим несколько строк:
INSERT INTO users (id,name,age,address,salary) VALUES (1, 'Paul', 32, 'California', 20000.00);
INSERT INTO users (id,name,age,address,salary) VALUES (2, 'Jesse', 35, 'Mexico', 30000.00);
INSERT INTO users (id,name,age,address,salary) VALUES (3, 'Linda', 27, 'Canada', 40000.00);Проверка вставки:
SELECT * FROM users;
Совет: для автоинкремента используйте последовательности или тип SERIAL/IDENTITY (в новых версиях предпочтителен GENERATED AS IDENTITY).
Пример с IDENTITY:
CREATE TABLE users2 (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT NOT NULL,
age INT
);8. Выборка и обновление данных
Примеры простых выборок:
SELECT name, age, salary FROM users;
SELECT * FROM users WHERE age > 30 ORDER BY salary DESC;Обновление записи:
UPDATE users SET address = 'Sweden' WHERE name = 'Paul';Проверка:
SELECT * FROM users;
Удаление строки:
DELETE FROM users WHERE id = 2;Транзакции:
BEGIN;
UPDATE users SET salary = salary * 1.05 WHERE id = 1;
-- если OK
COMMIT;
-- если нужно откатить
ROLLBACK;9. Резервное копирование и восстановление
Логические дампы — быстрый способ резервного копирования баз данных:
- Экспорт одной базы в файл:
sudo -u postgres pg_dump -F c -b -v -f /tmp/testdb.dump testdb- Восстановление из дампа:
sudo -u postgres pg_restore -d testdb -v /tmp/testdb.dumpАльтернатива: pg_dumpall для всех баз и ролей.
Физическое резервное копирование (file-system level) требует остановки сервера или использования basebackup:
sudo -u postgres pg_basebackup -D /var/lib/pgsql/15/basebackup -F tar -z -PСовет: храните дампы за пределами сервера и регулярно тестируйте восстановление.
10. Обслуживание и производительность
Основные команды обслуживания:
VACUUM; -- очистка мёртвых строк
VACUUM FULL; -- освобождение места (блокирует таблицу)
ANALYZE; -- обновление статистики оптимизатора
REINDEX; -- восстановление индексовВключите расширение pg_stat_statements для мониторинга запросов:
-- в postgresql.conf добавить в shared_preload_libraries = 'pg_stat_statements'
-- затем в базе:
CREATE EXTENSION pg_stat_statements;Используйте EXPLAIN (ANALYZE) для анализа плана выполнения запроса:
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;11. Безопасность и жёсткая настройка
Рекомендации по безопасности:
- Всегда используйте scram-sha-256 для паролей.
- Включите TLS для удалённых подключений; настройте ssl_cert_file и ssl_key_file.
- Ограничьте доступ по pg_hba.conf и firewall.
- Отключите привилегированные роли для приложений; применяйте принцип наименьших привилегий.
- Регулярно обновляйте PostgreSQL и ОС.
Пример строки для включения SSL в postgresql.conf:
ssl = on
ssl_cert_file = '/var/lib/pgsql/15/data/server.crt'
ssl_key_file = '/var/lib/pgsql/15/data/server.key'Использование fail2ban и мониторинг попыток входа по логам тоже повышают безопасность.
12. Репликация и высокая доступность — краткий обзор
PostgreSQL поддерживает несколько подходов к HA и репликации:
- Streaming replication (встроенная потоковая репликация).
- Logical replication (копирование отдельных таблиц/данных).
- Сторонние решения: Patroni, repmgr, PgBouncer, PgPool-II.
Этот гайд не покрывает настройку репликации в деталях, но для Production следует оценить: автоматическое failover (Patroni), прокси-пул соединений (PgBouncer) и хранение WAL-архивов.
13. Диагностика и распространённые ошибки
- Служба не стартует: проверьте права каталога данных и SELinux метки.
- Порт 5432 занят: используйте ss/netstat для поиска процесса.
sudo ss -ltnp | grep 5432- Ошибка аутентификации для 127.0.0.1: проверьте pg_hba.conf и убедитесь, что подключение идёт по нужному IP/методу.
- “password authentication failed”: перепроверьте пароль и метод шифрования (scram-sha-256 требует совпадения).
Журналы PostgreSQL в каталоге данных (обычно /var/lib/pgsql/15/data/pg_log) и systemd — первичный источник информации.
14. Чек-листы и playbook для типового развертывания
Чек-лист администратора при установке PostgreSQL 15 на Rocky Linux 9:
- Добавлен официальный репозиторий PostgreSQL.
- Установлены пакеты postgresql15-server и contrib.
- Выполнен postgresql-15-setup initdb.
- Служба запущена и включена (systemctl enable –now).
- Настроен firewall и SELinux (если нужен доступ извне).
- Настроен pg_hba.conf: локально peer, tcp scram-sha-256.
- Установлены пароли системного и DB-пользователя postgres.
- Созданы необходимые роли и базы.
- Настроено резервное копирование и проверено восстановление.
Playbook быстрого развертывания (шаблон действий):
- Установка репозитория и пакетов.
- Инициализация кластера.
- Настройка pg_hba.conf и postgresql.conf.
- Включение логирования и мониторинга.
- Создание пользователей и баз.
- Настройка резервного копирования.
- Тестовое восстановление.
Критерии приёмки
- Сервер отвечает на psql подключение локально и по 127.0.0.1.
- Роль postgres имеет установленный пароль.
- Создана тестовая база и таблица с успешной вставкой/чтением данных.
- Настроено ежедневное резервное копирование.
15. Тесты приёмки и примеры тест-кейсов
- Подключение: выполнить psql -U postgres -h 127.0.0.1 и ожидать приглашения пароля.
- CRUD: создать таблицу, вставить 3 строки, прочитать их, обновить одну запись, удалить одну запись.
- Резервное копирование: создать дамп и восстановить его в пустую базу.
- Производительность: EXPLAIN ANALYZE для простого запроса должен завершаться без ошибок.
16. Альтернативы и когда PostgreSQL может не подойти
Альтернативы: MySQL/MariaDB (широко распространены в веб), SQLite (встроенная, локальная), коммерческие СУБД (Oracle, MS SQL) в случаях специфических требований.
Когда PostgreSQL может не подойти:
- Если нужен встроенный однопользовательский локальный файл без серверной части — тогда SQLite.
- Если инфраструктура строго завязана на MySQL-экосистему и миграция дорогая.
17. Ментальные модели и рекомендации
- Думайте о ролях как о комбинации операционной и SQL-идентичности. Разграничивайте Unix-пользователей и PostgreSQL-ролей.
- Применяйте принцип наименьших привилегий: приложения получают минимальный набор прав.
- Резервное копирование и тестовое восстановление важнее частоты снятия дампов.
18. Шаблон командной витрины (cheat sheet)
# Службы
sudo systemctl start|stop|restart|status postgresql-15
# Инициализация
sudo postgresql-15-setup initdb
# Вход в psql
sudo -u postgres psql
sudo -u postgres psql -U alice -h 127.0.0.1
# Списки
\du -- роли
\l -- базы
\dt -- таблицы
# Резервное копирование
pg_dump -F c -b -v -f /tmp/db.dump dbname
pg_restore -d dbname /tmp/db.dump
# VACUUM
VACUUM;
ANALYZE;19. Советы по миграции с более ранних версий
- Всегда проверяйте совместимость SQL и расширений. Некоторые расширения могут требовать обновления.
- Тестируйте pg_upgrade или используйте logical dump/restore при переходе между крупными версиями.
- Проверьте пути к данным и владельцев файлов после апгрейда.
20. Очистка окружения
Если вы создавали тестовые таблицы, базы и роли в ходе работы, удалите их:
sudo -u postgres psql
\connect testdb
DROP TABLE users;
\connect postgres
DROP DATABASE alice;
DROP DATABASE testdb;
DROP USER alice;
\du
21. Краткое резюме
PostgreSQL 15 можно установить на Rocky Linux 9 из официального репозитория. После установки важно инициализировать кластер, настроить pg_hba.conf для безопасных методов аутентификации, задать пароли, создать роли и базы данных и настроить резервное копирование. Для продакшена добавьте мониторинг, TLS и решение для высокой доступности.
Важно: регулярно тестируйте восстановление из резервных копий и не принимайте дефолтные пароли в рабочей среде.
Ресурсы для дальнейшего изучения
- Официальная документация PostgreSQL (postgresql.org)
- Руководства по безопасности и настройке производительности
- Расширения: pg_stat_statements, pgaudit, PostGIS (если нужны геоданные)
Краткое окончание
Вы успешно прошли пошаговый путь от установки PostgreSQL 15 на Rocky Linux 9 до базовых операций с базой данных. Далее рекомендуем изучать расширения, настройку репликации и автоматизацию резервного копирования для Production-сред.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента