PostgreSQL, он же Postgres, — серьёзная база, которая умеет и простые CRUD-операции, и такие вещи, от которых MySQL тихо плачет в углу. Но если поставить её криво, потом будешь неделями ловить баги и глюки. 

Давай без романтики: ставим Postgres на Ubuntu 20.04, настраиваем роли и, если надо, включаем удалённый доступ. Минимум воды, максимум пользы.

Шаг 1. Установка

Ubuntu уже умеет ставить Postgres из своих реп. Просто:

sudo apt update
sudo apt install postgresql postgresql-contrib

postgresql-contrib — это доп. пакеты с полезными плюшками. Лучше поставить сразу, чем потом материться, что чего-то не хватает.

Шаг 2. Проверка, что оно живо

Postgres стартует автоматически после установки. Проверим версию:

sudo -u postgres psql -c "SELECT version();" 

Если что-то выдал — значит, жив.

Шаг 3. Понимаем, кто тут главный

В Postgres всё завязано на ролях. Роль может быть отдельным пользователем или целой бандой пользователей. От того, как ты их настроишь, зависит, кто куда имеет доступ. Методы аутентификации:

  • trust — впускает без пароля (осторожно, дыра в заборе)
  • password/md5/scram-sha-256 — нормальный вариант с паролем
  • ident/peer — проверка по системному имени пользователя

Всё это живёт в /etc/postgresql/12/main/pg_hba.conf.

Шаг 4. Пользователь postgres

При установке создаётся суперпользователь postgres. Он как root, только для базы.
Войти под ним:

sudo su - postgres
psql

Выйти:

\q 

Можно и без переключения:

sudo -u postgres psql

Шаг 5. Создаём своего пользователя и базу

Например, надо юзера john и базу johndb:

sudo su - postgres -c "createuser john"
sudo su - postgres -c "createdb johndb" 

Даем права:

GRANT ALL PRIVILEGES ON DATABASE johndb TO john;

Шаг 6. Включаем удалённый доступ

По дефолту Postgres слушает только локалку (127.0.0.1). Чтобы пускал снаружи:
В файле /etc/postgresql/12/main/postgresql.conf меняем:

listen_addresses = '*' 

Перезапуск:

sudo service postgresql restart

Проверка:

ss -nlt | grep 5432

Должен слушать 0.0.0.0:5432.

Шаг 7. Настройка доступа в pg_hba.conf

Примеры:

# jane во все базы с любого IP, пароль md5 host    all     jane    0.0.0.0/0     md5

# jane только в janedb с любого IP
host    janedb  jane    0.0.0.0/0     md5

# jane во все базы без пароля, если зашла с 192.168.1.134
host    all     jane    192.168.1.134 trust

Шаг 8. Открываем порт в UFW

Например, пускаем только подсеть 192.168.1.0/24:

sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5432

Итог

  • Просто поставить: apt install postgresql postgresql-contrib
  • Пользователь и база — через createuser и createdb
  • Удалёнка — правим listen_addresses и pg_hba.conf, не забываем про firewall

Не давай trust всему миру. Иначе однажды кто-то поставит в твою базу «майнкрафт-сервер» без спроса.