Как установить 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_lsclusterspg_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/Сначала разрешите серверу слушать сеть:
listen_addresses = '*'Затем добавьте в конец pg_hba.conf строку, которая пускает пользователя app в базу app с одного IP по паролю. Вместо 198.51.100.7 подставьте IP машины, которая будет подключаться. Если написать hostssl вместо host, сервер откажет в незашифрованных подключениях.
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 psqlFATAL: 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 postgresqlConnection 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 и остатки удалённых программ. Она показывает, сколько места занимает каждая находка, и очищает всё за один раз. Всё спорное остаётся без галочки, пока вы не решите.
Бесплатная пробная версия · 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/. Число — это ваша версия.