PostgreSQL — свободная система управления базами данных (СУБД): программа, которая хранит данные вашего сайта или бота и отдаёт их по запросу. На Ubuntu 24.04 она ставится одной командой — sudo apt install postgresql. Из штатного репозитория приедет версия 16, служебный пользователь postgres и запущенная служба, которая слушает порт 5432/TCP на локальном адресе 127.0.0.1. Дальше остаются четыре шага, которые новички чаще всего пропускают: первый вход через psql, создание отдельной базы с отдельным пользователем, правка pg_hba.conf и ограничение доступа к порту. Весь этот набор спокойно живёт на самом простом VPS с Ubuntu 24.04 — стартовые тарифы у части провайдеров начинаются от 139 ₽/мес.
Материал рассчитан на того, кто впервые поднимает базу на своём сервере: для небольшого сайта, Telegram-бота или внутреннего учёта. Ниже — выбор версии, пошаговая установка, разбор двух главных конфигов, таблица параметров памяти под 1–8 ГБ RAM, безопасное подключение с ноутбука и резервные копии. Каждая команда дана с пояснением, что она делает.
Какая версия PostgreSQL приедет из репозитория Ubuntu 24.04
В репозитории Ubuntu 24.04 LTS лежит PostgreSQL 16. Версия не самая свежая, но она получает исправления безопасности вместе с остальными обновлениями системы. Для типового сайта, бота или внутреннего сервиса разницы с новыми ветками вы не заметите: SQL-синтаксис, права, резервные копии и настройка памяти устроены одинаково.
Свежие ветки берут из официального репозитория проекта apt.postgresql.org (его называют PGDG). Смысл в этом есть, когда приложение требует конкретную версию или нужны свежие расширения. Плата — отдельный репозиторий, который придётся сопровождать самостоятельно.
Третий путь — контейнер Docker: база работает в изолированной «коробке» со своим окружением. Он удобен, когда на одной машине нужны рядом две-три версии. Но появляется целый слой, который придётся осваивать отдельно: тома для хранения данных, сети, проброс портов.
| Способ установки | Какая версия ставится | Когда выбирать |
|---|---|---|
| Штатный репозиторий Ubuntu 24.04 | PostgreSQL 16 | Первая база, обычный сайт или бот |
| Репозиторий проекта apt.postgresql.org | Ветки новее 16 | Приложение требует конкретную свежую версию |
| Контейнер | Любая | Несколько версий на одном сервере |
Дальше разбирается первый вариант: он покрывает большинство задач и не требует ничего, кроме доступа к серверу по SSH.
Сколько памяти, ядер и диска нужно серверу под базу
PostgreSQL нетребователен на старте: его фоновая служба (демон) в простое занимает порядка 30–60 МБ, и база на пару тысяч строк живёт даже на 512 МБ оперативной памяти. Проблемы начинаются не от размера базы, а от одновременных запросов: каждое соединение — это отдельный процесс, и при 20 активных клиентах сервер с 1 ГБ RAM начнёт упираться.
Разумный минимум для боевого проекта — 1 ядро и 2 ГБ RAM. Такая машина тянет базу на несколько гигабайт и 10–20 параллельных соединений. Под диск закладывайте объём базы, умноженный на 3: данные, индексы и место под резервную копию.
Тип диска для базы важнее, чем для статичного сайта: PostgreSQL постоянно пишет журнал транзакций, и на NVMe задержка записи измеряется десятыми долями миллисекунды против единиц миллисекунд на HDD. Экономия 50–60 ₽/мес на тарифе с обычным жёстким диском окупится минусом в отзывчивости на первой же тяжёлой выборке.
| Провайдер | Стартовая конфигурация | Цена | Для чего хватит |
|---|---|---|---|
| RuVDS | 1 ядро, 0,5 ГБ RAM, 10 ГБ HDD | от 139 ₽/мес | Учебная база, тестовый стенд |
| Selectel | 1 ядро, 1 ГБ RAM, 10 ГБ NVMe | от 200 ₽/мес | Небольшой сайт или бот |
| Aéza | 1 ядро, 2 ГБ RAM, 30 ГБ NVMe | от 593 ₽/мес, промо от 199 ₽ | Боевая база проекта |
Данные проверены 03.09.2026.
В разделе Linux собраны 44 провайдера, нижняя граница по рынку — 59 ₽/мес за 1 ГБ RAM и 10 ГБ NVMe. Такие тарифы годятся под учебную базу, но для проекта, где данные жалко потерять, смотрите площадки с резервным копированием на своей стороне. Бюджетные варианты собраны в разделе недорогих VPS.

Установка PostgreSQL на Ubuntu 24.04: пошаговая инструкция
Вся установка занимает 3–5 минут и требует только доступа к серверу с правами администратора. Если вы ещё не подключались к машине, начните с гайда как настроить SSH на VPS — там разобраны ключи и смена стандартного порта 22/TCP.
Команды ниже выполняются от обычного пользователя с правом sudo. Постоянно сидеть под root не нужно: цена опечатки в такой сессии заметно выше.
- Обновите список пакетов:
sudo apt update. Команда скачивает свежие индексы репозиториев, без неё apt может поставить устаревшую сборку. - Поставьте сервер и клиентские утилиты:
sudo apt install postgresql postgresql-contrib -y. Второй пакет добавляет расширения вродеpg_stat_statementsиpgcrypto. - Проверьте, что служба поднялась:
systemctl status postgresql. В выводе должно бытьactive (exited)у обёртки иactive (running)уpostgresql@16-main. - Включите автозапуск:
sudo systemctl enable postgresql. После перезагрузки сервера база поднимется сама. - Убедитесь, что порт занят:
ss -tlnp | grep 5432. Команда показывает, какие программы слушают сетевые порты. Ожидаемый ответ — прослушивание на 127.0.0.1:5432, то есть снаружи база пока недоступна. - Посмотрите версию:
psql --version. Для Ubuntu 24.04 это будет 16.x.
Если шаг 3 показал, что служба не запустилась, смотрите журнал: sudo journalctl -u postgresql@16-main -n 50. Ключ -n 50 выводит последние 50 строк — этого хватает, чтобы увидеть причину.
Первый вход через psql и минимум команд консоли
PostgreSQL не использует системные пароли. При установке создаётся учётная запись postgres в системе и одноимённая роль внутри СУБД. Ролью в PostgreSQL называют пользователя базы: у роли есть имя, пароль и набор прав. Вход выполняется командой sudo -u postgres psql: она запускает консоль от имени владельца базы, приглашение меняется на postgres=#.
Внутри psql работают два вида команд. SQL-запросы заканчиваются точкой с запятой — без неё консоль молча ждёт продолжения, и это первая ловушка новичка. Служебные команды начинаются с обратного слэша и точки с запятой не требуют.
Полезный минимум: l показывает список баз, du — роли и их права, c имя_базы переключает подключение, dt выводит таблицы, q закрывает консоль. Команда conninfo печатает, куда вы подключены: базу, пользователя, сокет и порт.
Сразу задайте пароль роли postgres: ALTER USER postgres WITH PASSWORD 'длинный_пароль';. Пока подключение идёт через локальный сокет, пароль не спрашивают, но он понадобится, как только вы разрешите вход по сети.
Как создать базу данных и пользователя с ограниченными правами
Подключать приложение под ролью postgres — то же самое, что запускать сайт от root. Эта роль в PostgreSQL суперпользовательская: она может удалить любую базу и изменить любые настройки, поэтому под каждый проект заводят отдельную роль и отдельную базу.
Последовательность простая: создать роль с паролем, создать базу и назначить эту роль владельцем. Владелец получает полные права на свою базу и не имеет доступа к чужим. В консоли psql это три команды.
CREATE USER shopapp WITH PASSWORD 'сюда_длинный_пароль';
CREATE DATABASE shopdb OWNER shopapp;
GRANT ALL PRIVILEGES ON DATABASE shopdb TO shopapp;
Первая создаёт роль с правом входа, вторая — базу с указанным владельцем, третья выдаёт права на подключение и создание объектов. Проверить результат можно командой l: в колонке Owner напротив shopdb появится shopapp.
Начиная с версии 15 роли по умолчанию не могут создавать таблицы в схеме public чужой базы. Если приложение жалуется на отказ в правах, подключитесь к нужной базе (c shopdb) и выполните GRANT ALL ON SCHEMA public TO shopapp; — это частая причина ошибки «permission denied for schema public» при переносе проекта со старого сервера.
Где лежат postgresql.conf и pg_hba.conf и чем они отличаются
Оба главных конфига лежат в каталоге /etc/postgresql/16/main/. Цифра в пути — мажорная версия, при переходе на новую ветку путь изменится. Найти каталог помогает запрос SHOW config_file; внутри psql.
Файл postgresql.conf отвечает за поведение сервера: сколько памяти отдать под кеш, на каких адресах слушать, что записывать в журнал. Строка со значением по умолчанию закомментирована знаком #; чтобы параметр заработал, комментарий снимают.
Файл pg_hba.conf отвечает за то, кому разрешено подключаться. HBA — это host-based authentication, доступ по адресу источника. Каждая строка описывает связку «тип подключения — база — пользователь — сеть — метод проверки», и правила читаются сверху вниз до первого совпадения.
Часть параметров применяется командой sudo systemctl reload postgresql, а изменения shared_buffers, listen_addresses и порта требуют перезапуска: sudo systemctl restart postgresql. Правки pg_hba.conf подхватываются перезагрузкой конфигурации без разрыва сессий.

Настройка памяти: shared_buffers, work_mem и кеш
PostgreSQL из коробки настроен скромно, чтобы запускаться на любом железе. На сервере, где база — основной потребитель ресурсов, три параметра дают заметный прирост без риска.
Параметр shared_buffers задаёт объём общей памяти под кеш страниц данных, практическое правило — 25 % от RAM. Больше отдавать смысла мало: остальное лучше оставить файловому кешу системы. Параметр work_mem — память на одну операцию сортировки или хеширования внутри запроса. Типовые значения — 4–16 МБ. Это значение расходуется на каждую параллельную операцию отдельно, поэтому 256 МБ на маленьком сервере быстро приведут к нехватке памяти.
Третий параметр, effective_cache_size, ничего не выделяет — он подсказывает планировщику, сколько данных предположительно лежит в кешах. Ориентировочно берут 50–75 % от RAM.
| RAM сервера | shared_buffers | work_mem | effective_cache_size |
|---|---|---|---|
| 1 ГБ | 256 МБ | 4 МБ | 640 МБ |
| 2 ГБ | 512 МБ | 8 МБ | 1,25 ГБ |
| 4 ГБ | 1 ГБ | 16 МБ | 2,5 ГБ |
| 8 ГБ | 2 ГБ | 16 МБ | 5 ГБ |
Значения ориентировочные и подходят для обычного веб-приложения. Проверить, что настройки применились, можно запросами SHOW shared_buffers; и SHOW work_mem; — они печатают действующие величины, а не то, что написано в файле.
Удалённый доступ к порту 5432 без дыр в безопасности
По умолчанию база слушает только 127.0.0.1 и доступна лишь приложениям на том же сервере. Для связки «сайт и база на одной машине» менять это не нужно вовсе.
Открывать 5432 в интернет без ограничения по адресу нельзя: сканеры находят такой порт за часы и начинают перебирать пароли. Если доступ снаружи всё же нужен, сначала поменяйте в postgresql.conf строку listen_addresses = '*' — база начнёт слушать все сетевые адреса. Затем добавьте в pg_hba.conf правило с конкретным адресом, а не с «любым» 0.0.0.0/0: host shopdb shopapp 203.0.113.10/32 scram-sha-256. Здесь /32 означает ровно один IP-адрес, а scram-sha-256 — современный метод проверки пароля.
Третий рубеж — межсетевой экран на самом сервере. Правило sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp пропускает только один адрес. Подробный разбор правил есть в гайде о том, как настроить фаервол на Linux-сервере.
Если постоянного адреса нет — домашний интернет обычно выдаёт динамический, — не открывайте порт вовсе. Команда ssh -L 5432:localhost:5432 user@ваш_сервер пробрасывает порт на ноутбук по защищённому каналу, и клиент вроде pgAdmin или DBeaver подключается к localhost. Для такой схемы удобнее вход по SSH-ключу.
Резервные копии: pg_dump и восстановление
Снимок диска у провайдера защищает от падения сервера, но не от ошибочного DELETE без условия — запроса, который вместо одной строки стирает всю таблицу. Логическая выгрузка (дамп) решает вторую задачу и занимает секунды на объёмах до нескольких гигабайт.
Базовая команда: sudo -u postgres pg_dump -Fc shopdb > /var/backups/shopdb_$(date +%F).dump. Ключ -Fc задаёт сжатый бинарный формат, из которого можно вытащить одну таблицу, а не всю базу. Подстановка $(date +%F) добавляет в имя дату в виде 2026-09-03, чтобы копии не перезаписывали друг друга.
Восстановление выполняет pg_restore: sudo -u postgres pg_restore -d shopdb -c /var/backups/shopdb_2026-09-03.dump. Ключ -c удаляет существующие объекты перед заливкой, иначе вы получите ошибки «уже существует».
Автоматизируйте выгрузку через cron — встроенный в Linux планировщик задач. Строка 0 4 * * * запустит скрипт ежедневно в 04:00. Держите минимум 7 последних копий и одну недельную, а файлы увозите с сервера — резервная копия на том же диске не спасает при его отказе. Логика переноса данных между машинами описана в гайде о переносе базы данных: у PostgreSQL меняются только утилиты, порядок действий тот же.
Как проверить, что база действительно работает
После установки полезно убедиться не только в том, что служба запущена, но и в том, что она отвечает на запросы и правильно раздаёт права. На это уходит пара минут.
Первая проверка — подключение под созданной ролью: psql -h 127.0.0.1 -U shopapp -d shopdb. Ключ -h заставляет клиент идти через сеть, а не через локальный сокет, и проверяет запись в pg_hba.conf. Если пароль запросили и пустили — связка ролей и правил настроена верно.
Вторая проверка — реальная запись. Создайте таблицу, вставьте строку и прочитайте её обратно: CREATE TABLE test (id serial, name text); INSERT INTO test (name) VALUES ('ok'); SELECT * FROM test;. Затем удалите её командой DROP TABLE test;. Это подтверждает, что у роли есть права на схему и на диске есть место.
Третья проверка — размер и активность. Запрос SELECT pg_size_pretty(pg_database_size('shopdb')); печатает размер базы в человекочитаемом виде, а SELECT count(*) FROM pg_stat_activity; показывает число текущих соединений. Если оно приближается к 100 (значение max_connections по умолчанию), приложению нужен не более мощный сервер, а пул соединений — посредник вроде PgBouncer, который держит несколько постоянных подключений и раздаёт их запросам по очереди.
Частые ошибки при установке PostgreSQL
Большая часть проблем на первом сервере повторяется из раза в раз и связана не с самой СУБД, а с доступами и памятью. Ниже — те, что чаще всего приводят к переустановке с нуля.
Каждая лечится за минуту, если знать, где смотреть: журнал journalctl и файл pg_hba.conf отвечают примерно на 80 % вопросов.
- Открыть порт 5432 для всех адресов «на время отладки» и забыть закрыть — база начинает получать переборы паролей в первые же сутки.
- Подключать приложение под ролью
postgres: одна ошибка в коде миграции удаляет чужие базы на том же сервере. - Поставить
shared_buffersв 70–80 % RAM: памяти не хватит операционной системе, и служба будет падать по нехватке ресурсов. - Забыть точку с запятой в конце SQL-запроса и решить, что консоль зависла.
- Хранить резервные копии на том же диске, что и базу.
- Ставить пакет
postgresql-16из стороннего репозитория поверх уже работающего экземпляра без остановки службы.
Частые вопросы
Нужен ли отдельный сервер под базу? Для проекта до нескольких тысяч посетителей в сутки — нет, сайт и база спокойно живут на одной машине с 2 ГБ RAM. Разносить их имеет смысл, когда база и веб-сервер начинают конкурировать за память или когда к базе ходят несколько приложений.
Сколько стоит сервер под небольшую базу? Стартовые тарифы в разделе Linux начинаются от 59 ₽/мес за 1 ГБ RAM и 10 ГБ NVMe, конфигурации с 1 ГБ и NVMe у известных площадок идут от 200 ₽/мес, а вариант с 2 ГБ RAM и 30 ГБ диска — от 593 ₽/мес либо от 199 ₽ по промо.
Почему psql не спрашивает пароль? При входе командой sudo -u postgres psql используется локальный сокет и метод peer: система считает, что раз вы уже вошли на сервер как postgres, повторная проверка не нужна. По сети пароль запрашивается всегда.
Как обновиться с PostgreSQL 16 на новую ветку? Мажорные версии не обновляются заменой пакета: нужно выгрузить базы через pg_dumpall, поставить новую ветку и залить данные обратно, либо использовать pg_upgrade. Перед этим делайте копию и закладывайте окно простоя.
Что делать с ошибкой «could not connect to server: Connection refused»? Она означает, что на указанном адресе и порту никто не слушает. Проверьте systemctl status postgresql, затем listen_addresses в postgresql.conf и правила межсетевого экрана — в 9 случаях из 10 причина в одном из этих трёх мест.
Подойдёт ли обычный виртуальный хостинг вместо VPS? На виртуальном хостинге обычно доступна только MySQL или MariaDB, а PostgreSQL встречается редко и без доступа к конфигам. Если нужны свои настройки памяти и расширения, берите виртуальный сервер с полным доступом к системе.
Сколько места закладывать под базу? Считайте размер данных, умноженный на 3: индексы обычно добавляют 20–50 % к объёму таблиц, плюс место под свежую выгрузку. Для базы на 5 ГБ комфортный диск — от 20 ГБ.
Итог
Установка сводится к команде apt install postgresql, остальное время уходит на обвязку: отдельная роль под приложение, настроенные shared_buffers и work_mem, закрытый порт 5432 и ежедневная выгрузка через pg_dump. Полчаса работы один раз снимают большую часть будущих проблем.
Из железа под первую базу достаточно 1 ядра, 2 ГБ RAM и NVMe-диска от 20 ГБ. Сравнить цены 44 провайдеров можно в разделе VPS на Linux.