Skip to content
VDS · Бази даних

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 clientsmax_connections вичерпано — налаштуйте пул на боці застосунку

Логи: /var/log/postgresql/ або journalctl -u postgresql.

Що далі

Не давайте застосунку роль суперкористувача. Звичайна роль власника бази даних може робити все, що їй потрібно, але не може знищити сусідні бази, якщо міграція піде не так.