Как установить PostgreSQL на Ubuntu 24

Установить PostgreSQL на Ubuntu можно из репозитория самой Ubuntu (в 24.04 это PostgreSQL 16, в 22.04 — 14) или взять версию новее из официального репозитория проекта PostgreSQL. В обоих случаях сервер запускается сразу после установки. Ниже — как входит пользователь postgres, как выделить приложению свою базу и как открыть сервер для одного внешнего адреса.

Как установить PostgreSQL на Ubuntu через apt

Пакет postgresql ставит сервер, клиент psql и первый кластер баз данных и сразу его запускает.

sudo apt update sudo apt install -y postgresql psql --version pg_lsclusters

pg_lsclusters выводит кластеры, например 16 main 5432 online postgres /var/lib/postgresql/16/main. Слово online значит, что сервер работает. В Ubuntu 22.04 там будет 14 — как и в путях к папкам ниже.

Как поставить свежий PostgreSQL с postgresql.org

Ubuntu держит одну версию PostgreSQL, пока жив выпуск системы. У проекта PostgreSQL есть свой репозиторий apt (PGDG) со всеми поддерживаемыми версиями. На его странице есть скрипт, который добавляет репозиторий и ключ подписи. Прежде чем что-то менять, скрипт попросит нажать Enter.

sudo apt install -y postgresql-common sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh sudo apt update sudo apt install -y postgresql-18

Если PostgreSQL 16 из Ubuntu уже стоит, новая версия его не заменяет и свой кластер не создаёт. Создайте его: sudo pg_createcluster 18 main --start Он займёт следующий порт, обычно 5433, а pg_lsclusters покажет оба. Перенос данных на новую версию — отдельная работа (pg_upgradecluster), так что сначала сделайте резервную копию.

Как войти пользователем postgres

При установке появляются системный пользователь и роль в базе, оба с именем postgres. Локальный вход идёт через peer: PostgreSQL пускает вас под ролью с тем же именем, что у системного пользователя, без пароля. Поэтому консоль открывают от имени этого системного пользователя:

sudo -u postgres psql

Внутри \l выводит базы, \du — роли, \q — выход. Строка вроде could not change directory to "/home/you": Permission denied над приглашением безобидна: пользователю postgres просто нельзя читать вашу домашнюю папку.

Как создать пользователя и базу данных

Дайте каждому приложению свою роль и свою базу и сделайте роль владельцем базы: начиная с PostgreSQL 15 создавать таблицы в схеме public без отдельных прав может только владелец. Вместо choose-a-strong-password придумайте свой длинный пароль.

sudo -u postgres psql -c "CREATE USER app WITH PASSWORD 'choose-a-strong-password';" sudo -u postgres psql -c "CREATE DATABASE app OWNER app;" psql -h localhost -U app -d app

Последняя команда спросит пароль и откроет базу app. Часть -h localhost важна: так psql подключается по TCP, где Ubuntu требует пароль (scram-sha-256). Без неё psql идёт через локальный сокет с peer и получает отказ, ведь вашего системного пользователя зовут не app.

Как осторожно открыть доступ по сети

По умолчанию PostgreSQL слушает только localhost. Для подключения с другой машины нужно поправить два файла и открыть один порт для одного адреса. Папку своей версии покажет команда:

ls /etc/postgresql/

Сначала разрешите серверу слушать сеть:

/etc/postgresql/16/main/postgresql.conf
listen_addresses = '*'

Затем добавьте в конец pg_hba.conf строку, которая пускает пользователя app в базу app с одного IP по паролю. Вместо 198.51.100.7 подставьте IP машины, которая будет подключаться. Если написать hostssl вместо host, сервер откажет в незашифрованных подключениях.

/etc/postgresql/16/main/pg_hba.conf
host app app 198.51.100.7/32 scram-sha-256

После смены listen_addresses нужен перезапуск. Затем пропустите через брандмауэр только этот адрес:

sudo systemctl restart postgresql sudo ufw allow from 198.51.100.7 to any port 5432 proto tcp

Правило UFW защищает, только пока UFW включён. Проверьте это: sudo ufw status Прежде чем включать его по SSH, пропустите SSH: sudo ufw allow OpenSSH На облачном сервере откройте порт 5432 и в брандмауэре провайдера — для того же единственного адреса. Никогда не пишите в pg_hba.conf адрес 0.0.0.0/0 или метод trust.

Если PostgreSQL не пускает

  • FATAL: Peer authentication failed for user "postgres" — вы запустили psql с -U postgres от своего системного пользователя. Для роли приложения добавьте -h localhost, чтобы psql спросил пароль. А под postgres консоль открывают так: sudo -u postgres psql
  • FATAL: password authentication failed for user "app" — неверный пароль. Задайте новый: sudo -u postgres psql -c "ALTER USER app WITH PASSWORD 'choose-a-strong-password';"
  • FATAL: no pg_hba.conf entry for host "198.51.100.7", user "app", database "app" — до сервера достучались, но подходящей строки в pg_hba.conf нет. Добавьте её, как выше, и примените: sudo systemctl reload postgresql
  • Connection refused и Is the server running on that host and accepting TCP/IP connections? — сервер не запущен или слушает только localhost. Проверьте pg_lsclusters, listen_addresses и брандмауэр.
  • ERROR: permission denied for schema public — роль не владеет базой. Сделайте её владельцем: sudo -u postgres psql -c "ALTER DATABASE app OWNER TO app;"
  • Служба postgresql в состоянии active (exited) — это нормально. Эта служба только запускает кластеры, сам сервер — postgresql@16-main, а журнал лежит в /var/log/postgresql/.

Если вы работаете и на Mac

MacWashing, раздел «Сборка мусора»: найдены мусор Xcode, пользовательский кэш, установщики и журналы, к очистке 22,83 ГБ

Сборка мусора в MacWashing находит кэш всех знакомых ей программ, в том числе спрятанный внутри их данных, а ещё журналы, мусор Xcode и остатки удалённых программ. Она показывает, сколько места занимает каждая находка, и очищает всё за один раз. Всё спорное остаётся без галочки, пока вы не решите.

Бесплатная пробная версия · macOS 14 и новее

Вопросы и ответы

Как установить PostgreSQL на Ubuntu?

Обновите список пакетов: sudo apt update Затем поставьте PostgreSQL: sudo apt install postgresql На Ubuntu 24.04 встанет PostgreSQL 16, на 22.04 — 14. Для версии новее подключите официальный репозиторий с postgresql.org.

Какой пароль у пользователя postgres по умолчанию?

Никакого. Роль postgres входит локально через peer: sudo -u postgres psql Если какой-то программе нужен пароль, задайте его внутри psql: \password postgres

Где в Ubuntu лежат настройки и данные PostgreSQL?

Настройки — в /etc/postgresql/16/main/ (postgresql.conf и pg_hba.conf), данные — в /var/lib/postgresql/16/main/, журналы — в /var/log/postgresql/. Число — это ваша версия.