В стандартных репозиториях своя версия PostgreSQL: 16 в Ubuntu 24.04, 14 в Ubuntu 22.04, 15 в Debian 12. Для большинства приложений её достаточно; если нужна конкретная новая версия, подключите официальный репозиторий apt.postgresql.org.
Установка
$ apt update$ apt install -y postgresql$ systemctl status postgresql --no-pager$ pg_lsclusterspg_lsclusters показывает версию, порт (по умолчанию 5432) и статус кластера. Каталог настроек — /etc/postgresql/ВЕРСИЯ/main/.
Пользователь и база
Администратор СУБД — системный пользователь postgres. Под ним создайте отдельную роль и базу для приложения:
$ sudo -u postgres createuser --pwprompt app$ sudo -u postgres createdb --owner=app appdbТо же самое через SQL в psql:
CREATE ROLE app LOGIN PASSWORD 'надёжный-пароль';CREATE DATABASE appdb OWNER app;Строка подключения для приложения: postgresql://app:пароль@127.0.0.1:5432/appdb.
Только локальные подключения
По умолчанию PostgreSQL слушает только localhost — так и оставьте, если приложение работает на этом же сервере. Проверьте:
$ 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 с паролем. Так подключается большинство приложений.
После изменения файла перечитайте конфигурацию — перезапуск не нужен:
$ systemctl reload postgresqlПроверьте результат
$ 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, или владелец схемы другой.