PostgreSQL: встановлення та ваша перша база даних
Встановлення PostgreSQL на VDS, ролі та перша база даних, як працює автентифікація в pg_hba.conf і усунення помилок з'єднання.
Оновлено 23 серпня 2026 р.
PostgreSQL — типовий вибір для застосунків на Python, Node.js і Go. Він суворіше ставиться до даних, ніж MySQL, і краще працює зі складними запитами.
Встановлення
apt update && apt install -y postgresql postgresql-contrib # Debian, Ubuntu
systemctl enable --now postgresql
На AlmaLinux і CentOS Stream кластер потрібно створити вручну:
dnf install -y postgresql-server postgresql-contrib
postgresql-setup --initdb
systemctl enable --now postgresql
Перевірте версію та статус:
sudo -u postgres psql -c "SELECT version();"
Роль і база даних
У PostgreSQL користувач називається роллю. Створіть окрему роль для кожного проєкту:
sudo -u postgres psql
CREATE ROLE shop WITH LOGIN PASSWORD 'long-random-password';
CREATE DATABASE shop OWNER shop ENCODING 'UTF8';
REVOKE ALL ON DATABASE shop FROM PUBLIC;
Рядок підключення для застосунку:
postgresql://shop:password@127.0.0.1:5432/shop
Перевірте від імені системного користувача:
psql "postgresql://shop:password@127.0.0.1:5432/shop" -c "\dt"
Автентифікація
Два файли визначають, хто і звідки може увійти.
/etc/postgresql/17/main/postgresql.conf:
listen_addresses = 'localhost'
port = 5432
/etc/postgresql/17/main/pg_hba.conf — правила читаються згори вниз, і перемагає перше відповідне:
local all postgres peer
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
Метод peer означає «системний користувач збігається з роллю» — саме тому sudo -u postgres psql працює без пароля, а та сама команда від іншого користувача — ні.
Після редагування: systemctl reload postgresql. Ніколи не використовуйте метод trust — він пускає будь-кого взагалі без пароля.
Для доступу ззовні прочитайте віддалений доступ: не можна відкривати порт назовні без обмеження за адресою.
Типові помилки
| Симптом | Причина |
|---|---|
role "..." does not exist | Ви підключаєтеся як системний користувач, у якого немає ролі |
password authentication failed | Правило в pg_hba.conf вимагає іншого методу, або пароль не встановлено |
could not connect to server: No such file or directory | Служба не запущена або використовує інший порт |
permission denied for schema public | У версіях 15+ потрібно явно надати права на public: GRANT ALL ON SCHEMA public TO shop; |
FATAL: sorry, too many clients | max_connections вичерпано — налаштуйте пул на боці застосунку |
Логи: /var/log/postgresql/ або journalctl -u postgresql.
Що далі
- Налаштування пам'яті за тарифами — на VDS-1 стандартні значення помітно занизькі.
- Резервні копії —
pg_dumpі відновлення. - Перенесення бази даних з іншого сервера.
Не давайте застосунку роль суперкористувача. Звичайна роль власника бази даних може робити все, що їй потрібно, але не може знищити сусідні бази, якщо міграція піде не так.