Перейти к содержимому

PostgreSQL: установка и первая база

Поставить PostgreSQL, создать пользователя и базу для приложения, разобраться с pg_hba.conf и оставить СУБД доступной только локально.

Уровень
Средний
Время чтения
2 мин чтения
Обновлено
Проверено на
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Содержание
  1. Установка
  2. Пользователь и база
  3. Только локальные подключения
  4. Как устроен pg_hba.conf
  5. Проверьте результат
  6. Частые ошибки

В стандартных репозиториях своя версия PostgreSQL: 16 в Ubuntu 24.04, 14 в Ubuntu 22.04, 15 в Debian 12. Для большинства приложений её достаточно; если нужна конкретная новая версия, подключите официальный репозиторий apt.postgresql.org.

Установка

bash
$ apt update$ apt install -y postgresql$ systemctl status postgresql --no-pager$ pg_lsclusters

pg_lsclusters показывает версию, порт (по умолчанию 5432) и статус кластера. Каталог настроек — /etc/postgresql/ВЕРСИЯ/main/.

Пользователь и база

Администратор СУБД — системный пользователь postgres. Под ним создайте отдельную роль и базу для приложения:

bash
$ sudo -u postgres createuser --pwprompt app$ sudo -u postgres createdb --owner=app appdb

То же самое через SQL в psql:

sql
CREATE ROLE app LOGIN PASSWORD 'надёжный-пароль';CREATE DATABASE appdb OWNER app;

Строка подключения для приложения: postgresql://app:пароль@127.0.0.1:5432/appdb.

Только локальные подключения

По умолчанию PostgreSQL слушает только localhost — так и оставьте, если приложение работает на этом же сервере. Проверьте:

bash
$ sudo -u postgres psql -c 'SHOW listen_addresses;'$ ss -tlnp | grep 5432

В выводе ss должно быть 127.0.0.1:5432 (и, возможно, [::1]:5432), но не 0.0.0.0:5432.

Как устроен pg_hba.conf

Файл /etc/postgresql/ВЕРСИЯ/main/pg_hba.conf решает, кому и каким способом можно подключиться. Правила проверяются сверху вниз, срабатывает первое подходящее.

Типичные строки
# TYPE  DATABASE  USER      ADDRESS        METHODlocal   all       postgres                 peerlocal   all       all                      peerhost    all       all       127.0.0.1/32   scram-sha-256host    all       all       ::1/128        scram-sha-256
  • local + peer — вход через Unix-сокет без пароля, если имя системного пользователя совпадает с ролью.
  • host + scram-sha-256 — подключение по TCP с паролем. Так подключается большинство приложений.

После изменения файла перечитайте конфигурацию — перезапуск не нужен:

bash
$ systemctl reload postgresql

Проверьте результат

bash
$ psql 'postgresql://[email protected]:5432/appdb' -c 'SELECT current_user, version();'

Частые ошибки

  • «Peer authentication failed for user app» — вы подключаетесь через сокет от другого системного пользователя. Укажите хост: psql -h 127.0.0.1 -U app appdb.
  • «password authentication failed» — пароль не задан или задан с ошибкой: ALTER ROLE app PASSWORD '…';.
  • Приложение не видит таблиц — они созданы в базе postgres, а не в appdb, или владелец схемы другой.

Дочитайте до конца — статья засчитается в обучении автоматически.

  • PostgreSQL
  • Postgres
  • СУБД
  • база данных
  • psql
  • pg_hba

Статья помогла?