Статья также доступна на украинском (перейти к просмотру).

Содержание:
- Что нужно перед установкой
- Установка PostgreSQL
- Проверка работы PostgreSQL
- Системный пользователь postgres
- Базовые команды psql
- Создание пользователя PostgreSQL
- Создание базы данных
- Проверка подключения новым пользователем
- Где находятся настройки PostgreSQL
- Удаленное подключение к PostgreSQL
- Перезапуск PostgreSQL после изменения конфигурации
- Удаление пользователя или базы
- Удаление пользователя или базы
- Что следует настроить на production-сервере
- Ресурсы для PostgreSQL на VPS
- Заключение
PostgreSQL – реляционная система управления базами данных для сайтов, API, CRM и серверных приложений. Материал для начинающего с VPS или выделенным сервером на Ubuntu. Здесь показано, как установить PostgreSQL на Ubuntu, проверить сервис, создать роль и базу и подготовить безопасное подключение. Первый доступ к PostgreSQL через SSH выполняется из локального терминала.
В отличие от MySQL или MariaDB, PostgreSQL имеет свою модель ролей и конфигурационных файлов, поэтому команды администрирования отличаются. Для работы необходим SSH-доступ, пользователь Linux с правами sudo и IP-адрес сервера. Если VPS еще нет, посмотрите VPS-хостинг Freehost. Готовый вариант с Ubuntu доступен на странице VPS на Ubuntu.
Что нужно перед установкой
Войдите на сервер через SSH:
ssh user@SERVER_IP
Замените user на имя Linux-пользователя, а SERVER_IP — IP-адресом VPS. Проверьте выпуск Ubuntu и свободное место:
lsb_release -ds df -h /
Обновите индексы пакетов. Полное обновление системы перед установкой PostgreSQL не обязательно, но его можно выполнить во время планового обслуживания:
sudo apt update
sudo apt upgrade
Команда apt update обновляет локальные списки пакетов. Команда sudo apt upgrade может быть полезна для планового обслуживания, но для базовой установки PostgreSQL не является обязательной. Перед обновлением проверьте backup, свободное место и доступ к консоли VPS.
Установка PostgreSQL
Стандартный репозиторий Ubuntu содержит нужный пакет. Для базового сценария не нужно добавлять сторонний репозиторий:
sudo apt install postgresql postgresql-contrib
Пакет postgresql добавляет сервер, клиент psql и systemd-сервис. Пакет postgresql-contrib содержит дополнительные расширения. После установки система создает начальный кластер и запускает сервер.
Проверьте версию клиента:
psql --version
Версия PostgreSQL зависит от релиза Ubuntu и подключенных источников пакетов. На проверенном VPS команда вернула PostgreSQL 16.15.

Проверка установки: версия 16.15, активный сервис и автозапуск.
Проверка работы PostgreSQL
После установки сервис обычно уже запущен. Проверьте его через systemctl:
sudo systemctl is-active postgresql sudo systemctl is-enabled postgresql sudo systemctl --no-pager status postgresql
Ожидаемые ответы active и enabled. Статус active (exited) для агрегированной службы не обязательно означает сбой: systemd управляет отдельным кластером. Просмотреть его можно так:
pg_lsclusters
Если сервис не запущен, сначала просмотрите журнал:
sudo journalctl -u postgresql --since "30 min ago" --no-pager
Для запуска или автозапуска используйте следующие команды только после проверки причины остановки:
sudo systemctl start postgresql sudo systemctl enable postgresql
Системный пользователь postgres
Два уровня доступа
При установке Ubuntu создает системного пользователя postgres. Он требует операционной системы для запуска процессов. Внутри СУБД существует отдельная роль с таким же именем. Системный пользователь и роль – разные объекты.
Войти в консоль PostgreSQL локально можно от имени системного пользователя:
sudo -u postgres psql
Промпт postgres=# означает, что открыта консоль администратора. Для приложения не используйте роль postgres: создайте отдельный пользователь PostgreSQL с ограниченными правами

Проверка локального SQL-запроса от имени системной роли postgres.
Базовые команды psql
Клиент psql PostgreSQL принимает SQL-запросы и служебные метакоманды. Основная шпаргалка для работы с базой:
-
\l - список баз данных;
-
\du - список ролей и их атрибутов;
-
\c database_name - переход к другой базе;
-
\dt - таблицы текущей базы;
-
\q - Выход из консоли.
Метакоманды начинаются с обратной косой черты и не нуждаются в точке с запятой. SQL-команды завершаются символом ;. Инструмент PostgreSQL psql удобен для быстрой проверки состояния и прав доступа. Для кратких диагностических запросов комбинация PostgreSQL psql не нуждается в графическом клиенте.
sudo -u postgres psql -X -P pager=off -c "SELECT datname, pg_get_userbyid(datdba) FROM pg_database ORDER BY datname;"

Команда psql PostgreSQL показывает названия баз и владельцев.
Создание пользователя PostgreSQL
Для приложения создайте отдельного пользователя PostgreSQL. Откройте консоль от имени администратора:
sudo -u postgres psql
Выполните SQL-команду создания роли с правом входа:
CREATE USER appuser WITH PASSWORD 'ЗАМЕНИТЕ_НА_СИЛЬНЫЙ_ПАРОЛЬ';
Для реального сервера используйте длинный уникальный пароль, не храните его в Git или в открытом конфигурационном файле. Проверить роль можно командой:
\du appuser
Создание базы данных
Создайте отдельную базу и сразу назначьте ее владельцем роль приложения:
CREATE DATABASE appdb OWNER appuser;
Владелец базы данных получает права на управление объектами, но доступы к отдельным таблицам все равно нужно планировать. После создания проверьте список баз:
\l \q
Проверка подключения новым пользователем
Выйдите из консоли администратора и проверьте подключение к PostgreSQL новой ролью:
psql -h localhost -U appuser -d appdb
Параметр -h задает сервер, -U — пользователя, -d — базу данных. Адрес 127.0.0.1 проверяет TCP-подключение, обычно использующее приложение. Без -h клиент может использовать Unix-сокет и другое правило доступа.
После ввода пароля выполните тестовый запрос:
SELECT current_database(), current_user; \q
Строка из URL для изменяющейся среды имеет вид:
postgresql://appuser:ПАРОЛЬ@127.0.0.1:5432/appdb
Не добавляйте реальный пароль в репозиторий. Для продакшена используйте переменные среды или хранилище секретов.
Где находятся настройки PostgreSQL
Что входит в PostgreSQL конфигурация
Под запросом “PostgreSQL конфигурация” подразумевают набор параметров сервера и правил аутентификации. Такая настройка PostgreSQL влияет на сеть, права доступа, память и журналы, поэтому перед редактированием сохраните копию.
Названия postgresql.conf и pg_hba.conf следует запомнить: первый файл описывает работу сервера, второй – проверку клиентов.
Основные параметры хранятся в двух файлах. Вместе они определяют сетевое поведение и правила доступа:
-
postgresql.conf — адрес прослушивания, порт, память, журналы и другие параметры сервера;
-
pg_hba.conf — правила, кто, откуда и на какую базу может выполнить аутентификацию.
Типичный путь на Ubuntu имеет переменный номер версии:
/etc/postgresql/<version>/main/postgresql.conf /etc/postgresql/<version>/main/pg_hba.conf
Точные пути и текущие параметры лучше получить через SQL:
sudo -u postgres psql -X -P pager=off -c "SHOW config_file;" sudo -u postgres psql -X -P pager=off -c "SHOW hba_file;" sudo -u postgres psql -X -P pager=off -c "SHOW listen_addresses; SHOW port;"
На проверенном сервере используется каталог /etc/postgresql/16/main/, адреса localhost и порт 5432. Не копируйте номер версии без проверки.

Проверка конфигурационных файлов, адресов и портов 5432.
Удаленное подключение к PostgreSQL
Для приложения на том же VPS достаточно локального доступа. Удаленное подключение PostgreSQL требуется, если сайт и база размещены на разных серверах. Не открывайте базу в Интернете без ограничений.
-
В основном файле укажите частный или другой конкретный адрес сервера в listen_addresses.
-
В файле доступа добавьте правило для одного IP-адреса сервера приложения.
-
В Firewall позвольте PostgreSQL порт 5432 только для этого источника.
-
Перезапустите PostgreSQL или выполните reload и проверьте подключение с сервера приложения.
Пример правила доступа:
host appdb appuser APP_SERVER_IP/32 scram-sha-256
Маска /32 позволяет один IPv4-адрес. Не используйте 0.0.0.0/0: так любой узел сети сможет обращаться в порт. Для настройки PostgreSQL на VPS лучше применить приватную сеть или SSH-туннель.
Firewall и SSH-туннель
Для PostgreSQL firewall правило должно содержать конкретный адрес:
sudo ufw allow from APP_SERVER_IP to any port 5432 proto tcp sudo ufw status numbered
Вариант без публичного порта – тоннель через SSH:
ssh -L 5432:127.0.0.1:5432 user@DB_SERVER_IP
После создания тоннеля клиент подключается к 127.0.0.1:5432 на локальном компьютере. Это уменьшает поверхность атаки и не отменяет проверку пароля.
Перезапуск PostgreSQL после изменения конфигурации
После изменения файла доступа обычно достаточно перечитать правила:
sudo systemctl reload postgresql
После тзменения listen_addresses или порта может потребоваться полный перезапуск:
sudo systemctl restart postgresql
reload применяет доступные непрерывно параметры и не прерывает активные сессии. restart останавливает и запускает процесс заново, поэтому выполняйте его в согласованное окно работ. После операции повторите проверку через systemctl и журнал.
Удаление пользователя или базы
Команды DROP DATABASE и DROP USER используйте только после проверки backup и активных подключений:
DROP DATABASE appdb; DROP USER appuser;
DROP DATABASE безвозвратно удаляет данные. Если роль владеет объектами или имеет зависимости, сначала переназначьте их или удалите в контролируемой среде.
Типичные проблемы
-
В соединении отказано. Проверьте, запущен ли сервис, слушает ли нужный адрес и открыт ли порт.
-
PostgreSQL не запущен. Проверьте статус через systemctl, журнал запуска и состояние кластера
-
Ошибка аутентификации. Проверьте роль, пароль и соответствующее правило доступа.
-
У пользователя нет доступа к базе. Проверьте владельца, права на схему и таблицы. Владелец базы данных не всегда владелец объектов, созданных другой ролью.
-
Порт 5432 закрытый firewall. Проверьте правило UFW, внешний firewall провайдера и IP-адрес клиента.
-
Изменения не действуют. Проверьте синтаксис файлов и выполните reload или restart в зависимости от параметра.
Для диагностики локального сервера выполните:
sudo systemctl is-active postgresql sudo ss -lntp | grep 5432 sudo -u postgres psql -X -P pager=off -c "SHOW listen_addresses; SHOW port;"
Что следует настроить на production-сервере
Перед изменениями и по расписанию создавайте резервную копию:
pg_dump -h 127.0.0.1 -U appuser -d appdb -Fc -f /var/backups/appdb.dump
Копия на том же диске не защищает от его отказа. Предусмотрите другое хранилище и тестовое восстановление. Настройте firewall, ограничьте удаленный доступ, регулярно обновляйте Ubuntu, контролируйте свободное место, RAM и журналы. Мониторинг диска, RAM и PostgreSQL поможет заметить проблему до остановки приложения. SSD или NVMe полезны для нагруженных баз, но не заменяют индексы, оптимизацию запросов и backup.
Ресурсы для PostgreSQL на VPS
PostgreSQL на VPS может работать на небольшом тарифе, если нагрузка умеренная. Для больших баз и большого количества запросов требуются достаточно RAM, процессор и быстрый диск. VPS от FREEhost.UA имеет запас ресурсов для базы, веб-сервера и фонового worker-а. Отдельный PostgreSQL сервер удобен для проекта, где база нуждается в собственных ресурсах и независимом мониторинге.
Заключение
После выполнения инструкции PostgreSQL работает, создан отдельный пользователь и база данных с владельцем. Подключение через psql проверено, приложение можно подключить через переменные среды.
Затем настройте резервное копирование, проверьте восстановление и оптимизируйте PostgreSQL под нагрузку. Удаленный доступ ограничивайте конкретным IP-адресом.
Подписывайтесь на наш Telegram-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов
Смотрите наш канал YouTube на https://www.youtube.com/freehostua.
Мы в чем ошиблись, или что-то пропустили?
Напишите об этом в комментариях, мы с удовольствием ответим и обсудим ваши замечания и предложения.
|
Дата: 15.09.2026 Автор: Алексей Литвинцев
|
|

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus