linux-labs

Вики / Службы и systemd

PostgreSQL

Сервис Ubuntu 24.04 · PostgreSQL 16 СлужбыБазы данныхСеть

Реляционная СУБД — psql, роли и базы, доступ (pg_hba), бэкап, траблшутинг.

PostgreSQL — мощная реляционная СУБД. Служба postgresql под systemd; данные в /var/lib/postgresql/<version>/main, конфиги в /etc/postgresql/<version>/main/.

Суперпользователь БД — postgres (сопоставлен одноимённому ОС-пользователю через peer-аутентификацию локально).

sudo -u postgres psql             # консоль от суперпользователя
systemctl status postgresql
ss -tlnp | grep 5432              # слушает ли порт
-- внутри psql:
\l                                -- список баз
\du                               -- список ролей
\c dbname                         -- подключиться к базе
\dt                               -- таблицы
\q                                -- выход

CREATE ROLE app LOGIN PASSWORD 'secret';
CREATE DATABASE appdb OWNER app;
GRANT ALL PRIVILEGES ON DATABASE appdb TO app;
# то же из шелла
sudo -u postgres createuser --pwprompt app
sudo -u postgres createdb -O app appdb

Кто откуда и как аутентифицируется — pg_hba.conf:

# TYPE  DATABASE  USER  ADDRESS         METHOD
local   all       all                   peer
host    all       all   127.0.0.1/32    scram-sha-256
host    appdb     app   10.0.0.0/24     scram-sha-256

Слушать по сети — listen_addresses в postgresql.conf. После правок:

sudo systemctl reload postgresql
sudo -u postgres pg_dump appdb > appdb.sql        # дамп одной базы
sudo -u postgres pg_dumpall > all.sql             # все базы + роли
psql appdb < appdb.sql                            # восстановить
pg_dump -Fc appdb > appdb.dump ; pg_restore -d appdb appdb.dump   # бинарный формат

psql: connection refused (5432)

Служба не запущена или слушает только localhost. systemctl status postgresql, ss -tlnp | grep 5432. Для сети — listen_addresses='*' + pg_hba + reload.

password authentication failed / peer authentication failed

  • Локально по умолчанию peer (ОС-пользователь = роль БД). Для входа по паролю нужна строка host ... scram-sha-256 в pg_hba.conf.
  • sudo -u postgres обязателен для локального суперпользователя.

FATAL: database "x" does not exist

Проверь имя (\l), создай (createdb).

Не применяются изменения конфига

postgresql.conf — часть параметров требует restart, не reload (SELECT pg_reload_conf(); перечитывает то, что можно).

sudo -u postgres psql             # консоль суперпользователя
\l  \du  \dt  \c db  \q           # базы/роли/таблицы/подключиться/выход
sudo -u postgres pg_dump db > db.sql      # бэкап
ss -tlnp | grep 5432              # слушает?
# доступ: /etc/postgresql/16/main/pg_hba.conf + reload

См. также