Вики / Службы и systemd
PostgreSQL
Реляционная СУБД — 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
См. также
- ss (сокеты и порты) — Сеть
- sudo — Пользователи и права
- systemctl — Службы и systemd