Установка PostgreSQL на Windows, macOS и Linux
Чтобы установить PostgreSQL на Windows 10, запустите официальный установщик. Мастер установит сервер и предложит задать пароль роли postgres. На macOS можно использовать Homebrew, на Linux – пакеты PGDG.
После установки проверьте службу, создайте отдельного пользователя и базу. Удаленный доступ включайте только для доверенных компьютеров.
- Какую версию PostgreSQL ставить
- Как установить postgresql на windows 10 и 11
- Установка PostgreSQL на macOS
- Установка PostgreSQL на Linux
- Первое подключение: psql и pgAdmin
- Где находится pg_hba.conf и как настроить доступ
- Как разрешить удаленное подключение
- Как перезапустить PostgreSQL
- Ошибки при установке PostgreSQL
Какую версию PostgreSQL ставить
Для нового проекта выбирайте актуальную поддерживаемую мажорную ветку PostgreSQL. Если приложение требует конкретную ветку, используйте ее последнюю исправляющую сборку.
Срок поддержки ограничивает период выпуска исправлений для мажорной ветки. В течение этого периода разработчики исправляют ошибки и уязвимости. После окончания поддержки ветка больше не получает таких обновлений. Запланируйте переход на поддерживаемую ветку до завершения этого срока.
Страница версий PostgreSQL показывает поддерживаемые ветки и даты окончания поддержки. Мажорный номер нужен для имени пакета, службы и каталога данных.
В командах заменяйте <версия> выбранным мажорным номером, без угловых скобок. В пределах одной установки используйте одинаковый номер во всех командах.
Как установить postgresql на windows 10 и 11
Для установки PostgreSQL на Windows используйте графический мастер. Он добавляет сервер, клиентские утилиты и службу операционной системы.
- Откройте страницу загрузок PostgreSQL и выберите Windows.
- Скачайте предложенный установщик. Запустите его через контекстное меню файла с правами администратора.
- Оставьте каталог программы по умолчанию, если отдельный диск не нужен.
- В составе компонентов выберите PostgreSQL Server, Command Line Tools и pgAdmin.
- Укажите каталог данных на локальном диске со свободным местом. В нем сервер сохранит базы и конфигурацию.
- Задайте надежный пароль роли
postgres. Этот пароль нужен для первого подключения к серверу. - Оставьте порт
5432, если его не занимает другой экземпляр PostgreSQL. При другом значении запишите новый порт. - Выберите локаль для языка ваших данных. Она влияет на сортировку текста.
- Завершите установку. Мастер покажет сообщение об успешном окончании.
StackBuilder можно пропустить при первой установке. Он нужен для дополнительных компонентов, а сервер и psql уже входят в выбранные компоненты.
Проверьте службу PostgreSQL
Нажмите Win + R, введите команду и нажмите Enter:
services.mscВ списке найдите службу PostgreSQL с номером выбранной ветки. Состояние «Выполняется» означает, что сервер запущен. Если служба остановлена, откройте ее контекстное меню и выберите запуск.
В свойствах службы запишите системное имя. Оно пригодится при перезапуске из командной строки.
Добавьте psql в PATH
Откройте каталог установки PostgreSQL и найдите папку bin. Через поиск Windows откройте настройку переменных среды по запросу «переменные среды». В переменную Path добавьте полный путь к этой папке отдельной записью.
Откройте новое окно терминала и выполните:
psql --versionТерминал выведет версию клиента. Если команда не найдена, откройте PowerShell и запустите клиент напрямую:
& "C:\Program Files\PostgreSQL\<версия>\bin\psql.exe" --versionЕсли вы меняли каталог установки, замените путь своим. Такой запуск работает без настройки Path.
Установка PostgreSQL на macOS
На macOS выберите один способ установки: Postgres.app, Homebrew или инсталлятор EDB. Одновременный запуск нескольких серверов на порту 5432 приводит к конфликту.
Postgres.app
Откройте страницу загрузок PostgreSQL для macOS и выберите Postgres.app. Перенесите скачанное приложение в каталог программ macOS и откройте его.
В окне приложения найдите управление инициализацией и запуском сервера. Если кластер еще не создан, сначала выполните инициализацию. Затем запустите экземпляр и запишите показанный порт.
Для запуска клиента откройте Terminal и выполните:
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"
psql --version
psql -d postgresПри успешном входе появится приглашение psql. Этот способ использует имя текущего пользователя macOS. Если приложение установлено в другом каталоге, измените путь перед запуском.
Если подготовить сервер через приложение не получилось, закройте Postgres.app. Используйте установку через Homebrew, чтобы не запускать два экземпляра одновременно.
Homebrew
Для следующих команд нужен установленный Homebrew. Команда установки Homebrew находится на его официальном сайте. Выполните ее в Terminal, затем команды настройки окружения из вывода установщика.
Проверьте доступность пакетного менеджера:
brew --versionЕсли Terminal вывел версию Homebrew, найдите доступную формулу PostgreSQL:
brew search postgresql@Установите выбранную ветку и запустите службу:
brew install postgresql@<версия>
brew services start postgresql@<версия>
brew services listВ списке служб выбранная формула должна иметь состояние started. Для текущего терминала добавьте ее клиент в PATH:
export PATH="$(brew --prefix postgresql@<версия>)/bin:$PATH"
psql --version
psql -d postgresПри успешном входе появится приглашение psql. Начальное административное подключение использует роль с именем пользователя macOS. Для выхода выполните внутри psql:
\qИнсталлятор EDB
На странице загрузок PostgreSQL для macOS выберите инсталлятор EDB. В мастере укажите каталог данных, пароль роли postgres и порт 5432.
После завершения откройте Terminal. Добавьте каталог bin установленной версии в PATH текущего окна:
export PATH="<каталог установки>/bin:$PATH"
psql -h 127.0.0.1 -p 5432 -U postgres -d postgres -WВведите пароль из мастера. При успешном подключении появится приглашение psql.
Установка PostgreSQL на Linux
Ubuntu и Debian используют apt, а RHEL, Rocky Linux и AlmaLinux – dnf. Команды выполняйте в терминале с правами sudo.
Ubuntu и Debian: репозиторий PGDG
Подключите официальный репозиторий PGDG через пакетный скрипт:
sudo apt update
sudo apt install -y postgresql-common ca-certificates
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt updateУстановите сервер и клиент выбранной ветки:
sudo apt install -y postgresql-<версия> postgresql-client-<версия>
sudo systemctl enable --now postgresql
pg_lsclustersКоманда pg_lsclusters покажет версию, порт, каталог данных и состояние кластера. Если список пуст, создайте кластер и запустите его:
sudo pg_createcluster <версия> main --start
pg_lsclustersСостояние online означает, что кластер работает. Запишите его порт: при нескольких установках он может отличаться от 5432.
RHEL, Rocky Linux и AlmaLinux
Подключите репозиторий PGDG для своей версии Enterprise Linux:
sudo dnf install -y "https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %rhel)-$(uname -m)/pgdg-redhat-repo-latest.noarch.rpm"Если дистрибутив включил модуль PostgreSQL, отключите его перед установкой пакетов PGDG:
sudo dnf module disable -y postgresqlУстановите сервер, инициализируйте новый кластер и включите автозапуск:
sudo dnf install -y postgresql<версия>-server postgresql<версия>
sudo /usr/pgsql-<версия>/bin/postgresql-<версия>-setup initdb
sudo systemctl enable --now postgresql-<версия>
sudo systemctl status postgresql-<версия> --no-pagerСостояние active (running) означает, что служба работает. Не запускайте initdb повторно в каталоге с существующими базами.
Откройте первое административное подключение от системного пользователя postgres. Полный путь к клиенту позволяет обойти настройку PATH:
sudo -u postgres /usr/pgsql-<версия>/bin/psql -d postgresДля последующих команд psql добавьте каталог клиента в PATH своего терминала. Выполните это после выхода из psql:
export PATH="/usr/pgsql-<версия>/bin:$PATH"
psql --versionПервое подключение: psql и pgAdmin
psql принимает команды в терминале, а pgAdmin открывает сервер в графическом интерфейсе. Сначала подключитесь административной ролью, затем создайте отдельную роль для приложения.
Подключение через psql
После установки через мастер Windows или EDB выполните в терминале ОС:
psql -h 127.0.0.1 -p 5432 -U postgres -d postgres -WВведите пароль роли postgres из мастера. На Ubuntu и Debian первое локальное подключение откройте так:
sudo -u postgres psql -d postgresНа RHEL-подобных системах используйте клиент установленной ветки:
sudo -u postgres /usr/pgsql-<версия>/bin/psql -d postgresДля Homebrew и Postgres.app используйте начальную административную роль с именем пользователя macOS:
psql -d postgresНачиная с PostgreSQL 14, параметр password_encryption по умолчанию использует scram-sha-256. Он задает формат хранения новых паролей, а не правило входа. Метод аутентификации каждого подключения задает файл pg_hba.conf.
Внутри административного подключения psql явно задайте формат хранения новых паролей:
SET password_encryption = 'scram-sha-256';Если вы вошли под postgres, задайте пароль этой роли:
\password postgresНа macOS под ролью текущего пользователя смените ее собственный пароль:
\passwordКоманда запросит новый пароль дважды. При успешной смене psql вернет приглашение без сообщения об ошибке.
Создайте пользователя и базу
Выполните SQL-команды в psql под административной ролью:
CREATE ROLE app_user LOGIN;
\password app_user
CREATE DATABASE app_db OWNER app_user;Команда смены пароля скроет ввод от посторонних глаз. Сообщения CREATE ROLE и CREATE DATABASE подтверждают создание объектов. Проверьте их метакомандами:
\l
\du
\c app_db
SELECT current_database(), current_user;
\qДля проверки входа пользователя приложения подключитесь из терминала:
psql -h 127.0.0.1 -p 5432 -U app_user -d app_db -WЕсли сервер отклоняет парольный вход, настройте локальное правило pg_hba.conf. Административное подключение при этом оставьте открытым в другом окне.
Подключение через pgAdmin
Откройте установленный pgAdmin и запустите регистрацию нового сервера. Введите произвольное имя подключения, адрес 127.0.0.1 и порт 5432. Укажите базу обслуживания postgres, пользователя postgres и его пароль.
Для Homebrew или Postgres.app укажите административную роль с именем пользователя macOS. Если pgAdmin не установлен, продолжайте работу через psql: SQL-команды одинаковы.
После сохранения сервер появится в дереве. Откройте базу app_db, запустите редактор SQL и выполните:
SELECT current_database(), current_user;В таблице результатов появятся имя базы и роль подключения.
Где находится pg_hba.conf и как настроить доступ
Чтобы узнать, где находится файл pg_hba.conf, выполните SQL-запрос к серверу PostgreSQL. Файл pg_hba.conf задает правила входа, а postgresql.conf хранит параметры самого сервера.
Для следующих действий вернитесь в административное подключение. Не выполняйте их под созданной ролью app_user. На Windows используйте postgres с паролем из мастера:
psql -h 127.0.0.1 -p 5432 -U postgres -d postgres -WНа Linux откройте локальное подключение через системного пользователя postgres. На macOS используйте административную роль вашей установки.
Выполните запросы в административном psql или редакторе SQL:
SHOW hba_file;
SHOW config_file;
SHOW data_directory;Сервер вернет действующие пути. Типичные каталоги выглядят так:
| Установка | Каталог конфигурации |
|---|---|
| Windows | C:\Program Files\PostgreSQL\<версия>\data\, если каталог данных не меняли в мастере |
| Ubuntu и Debian | /etc/postgresql/<версия>/main/ |
| RHEL с пакетами PGDG | /var/lib/pgsql/<версия>/data/ |
| Homebrew | $(brew --prefix)/var/postgresql@<версия>/ |
| Postgres.app | Подкаталог экземпляра внутри ~/Library/Application Support/Postgres/ |
Для работающего сервера используйте именно пути из SQL-запросов. Отдельный каталог конфигурации может находиться вне каталога данных.
Формат правила доступа
Откройте файл по пути из SHOW hba_file; текстовым редактором с правами владельца файла. Сохраните резервную копию перед изменением. Для локального TCP-входа добавьте правила перед более общими совпадающими строками:
host app_db app_user 127.0.0.1/32 scram-sha-256
host app_db app_user ::1/128 scram-sha-256Поля идут в порядке: тип подключения, база, роль, адрес клиента и метод. Сервер читает строки сверху вниз и применяет первое совпадение. После неудачной аутентификации он не переходит к следующей строке.
Метод peer сверяет имя локального пользователя ОС при подключении через Unix-сокет. scram-sha-256 проверяет пароль и подходит для новых подключений. md5 встречается в старых конфигурациях и считается устаревшим вариантом.
Метод хранения пароля и правило входа решают разные задачи. Параметр password_encryption влияет на новые пароли, но не переписывает существующие. Поэтому сначала задайте формат SCRAM, затем смените пароль через psql.
Сохраните файл и перечитайте настройки из административного подключения:
SELECT pg_reload_conf();
SELECT line_number, error
FROM pg_hba_file_rules
WHERE error IS NOT NULL;Первый запрос вернет true, если сигнал принят. Второй запрос поможет найти ошибочную строку. Пустой результат второго запроса означает отсутствие обнаруженных ошибок разбора.
Для изменения pg_hba.conf хватает reload. Проверьте новое подключение в отдельном окне терминала. Если вход перестал работать, восстановите копию файла и повторите reload.
Документация pg_hba.conf описывает типы подключений, адреса и порядок применения правил.
Как разрешить удаленное подключение
Удаленный вход требует трех изменений: сервер слушает сетевой адрес, pg_hba.conf разрешает клиента, а брандмауэр пропускает порт. Настраивайте доступ только на своем сервере и для доверенной сети. Не публикуйте учебную базу в интернете.
Сначала получите путь к postgresql.conf из административного подключения:
SHOW config_file;Откройте файл по этому пути текстовым редактором с правами владельца. Сохраните копию и измените параметр:
listen_addresses = 'localhost,192.168.1.10'
port = 5432Замените адрес на IP самого сервера в доверенной сети. Сохраните файл и добавьте в pg_hba.conf правило для клиента:
host app_db app_user 192.168.1.20/32 scram-sha-256В примере сервер использует адрес 192.168.1.10, а клиент – 192.168.1.20. Замените оба адреса своими. Маска /32 ограничивает правило одним IPv4-адресом.
Если доступ нужен всей доверенной подсети, используйте ее сетевой адрес:
host app_db app_user 192.168.1.0/24 scram-sha-256Запись 0.0.0.0/0 охватывает любые IPv4-адреса, поэтому ее не применяйте. Ограничение в брандмауэре должно соответствовать выбранным клиентам.
На Windows через поиск найдите PowerShell. Откройте его с правами администратора через контекстное меню. Для одного клиента выполните:
New-NetFirewallRule -DisplayName "PostgreSQL LAN" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5432 -RemoteAddress 192.168.1.20 -Profile PrivateПравило действует для частного сетевого профиля. На Ubuntu и Debian с ufw используйте:
sudo ufw allow from 192.168.1.20 to any port 5432 proto tcpНа RHEL-подобной системе с firewalld сначала определите активную зону:
sudo firewall-cmd --get-active-zonesВыберите зону сетевого интерфейса сервера. Замените <зона> ее именем и разрешите вход только клиенту:
sudo firewall-cmd --permanent --zone=<зона> --add-rich-rule='rule family="ipv4" source address="192.168.1.20/32" port port="5432" protocol="tcp" accept'
sudo firewall-cmd --reloadПосле изменения listen_addresses перезапустите сервер. Затем с другого компьютера выполните в терминале:
psql -h 192.168.1.10 -p 5432 -U app_user -d app_db -WУспешный вход откроет приглашение psql. Парольная аутентификация SCRAM не заменяет шифрование всего соединения. Для работы через недоверенную сеть настройте TLS.
Чтобы вернуть локальный режим, восстановите listen_addresses со значением localhost. Удалите добавленную сетевую строку из pg_hba.conf и перезапустите сервер. Затем удалите правило брандмауэра.
На Windows удалите созданное правило через административный PowerShell:
Remove-NetFirewallRule -DisplayName "PostgreSQL LAN"Для ufw выполните в терминале:
sudo ufw delete allow from 192.168.1.20 to any port 5432 proto tcpДля firewalld удалите то же правило из выбранной зоны:
sudo firewall-cmd --permanent --zone=<зона> --remove-rich-rule='rule family="ipv4" source address="192.168.1.20/32" port port="5432" protocol="tcp" accept'
sudo firewall-cmd --reloadКак перезапустить PostgreSQL
Reload перечитывает изменяемые параметры без остановки. Restart разрывает текущие подключения и запускает сервер заново. Для изменения listen_addresses нужен restart.
Windows
Откройте список служб через Win + R:
services.mscВыберите службу PostgreSQL и выполните перезапуск через контекстное меню. Для командного способа найдите cmd через поиск Windows. Откройте его с правами администратора.
В командах замените <имя службы> системным именем из свойств службы. Используйте имя, которое записали при проверке установки:
net stop "<имя службы>"
net start "<имя службы>"После запуска проверьте подключение через psql.
macOS
Для Homebrew выполните в Terminal:
brew services restart postgresql@<версия>
brew services listВ Postgres.app остановите и снова запустите сервер через управление экземпляром. Для ручного экземпляра используйте pg_ctl от владельца кластера. Путь к данным заранее получите запросом:
SHOW data_directory;Выполните в терминале:
pg_ctl restart -D "<каталог данных>"Linux
На Ubuntu и Debian перезапустите общий сервис:
sudo systemctl restart postgresql
pg_lsclustersНа RHEL-подобной системе укажите мажорную ветку:
sudo systemctl restart postgresql-<версия>
sudo systemctl status postgresql-<версия> --no-pagerДля pg_hba.conf на любой ОС достаточно выполнить в административном psql:
SELECT pg_reload_conf();Ошибки при установке PostgreSQL
Сначала определите, на каком этапе возникает ошибка. Не найденная команда указывает на клиент, отказ входа – на подключение. Если служба не запускается, начинайте с ее журнала.
«psql не является внутренней или внешней командой»
Windows не видит папку bin. Добавьте ее в Path и откройте новый терминал. Временный обход – запуск по полному пути в PowerShell:
& "C:\Program Files\PostgreSQL\<версия>\bin\psql.exe" -h 127.0.0.1 -U postgres -d postgres«password authentication failed»
Сервер отверг роль или пароль. Проверьте имя базы, порт и роль. Через локальное административное подключение задайте пароль снова:
SET password_encryption = 'scram-sha-256';
\password app_userЗатем проверьте первое совпадающее правило pg_hba.conf. Не включайте trust для устранения ошибки пароля: этот метод разрешает вход без проверки пароля.
«port 5432 already in use»
Другой процесс уже слушает порт. На Windows выполните в PowerShell:
Get-NetTCPConnection -LocalPort 5432 -State ListenНа Linux выполните в терминале:
sudo ss -ltnp 'sport = :5432'Если найденный экземпляр нужен, назначьте новому серверу порт 5433. Укажите его в каждой команде подключения и правилах брандмауэра.
Ошибка кодировки консоли Windows
Покажите кодировку соединения в psql:
SHOW client_encoding;Для классической консоли Windows можно выбрать кодовую страницу и согласовать ее с клиентом. Выполните в терминале перед запуском psql:
chcp 1251
psql -h 127.0.0.1 -U postgres -d postgresЗатем выполните внутри psql:
SET client_encoding = 'WIN1251';Проверьте отображение кириллицы в результатах запроса. Такое изменение настраивает соединение, но не перекодирует содержимое базы.
Служба не стартует
Посмотрите журнал сразу после ошибки, без подключения к SQL. На Ubuntu и Debian выполните в терминале:
sudo journalctl -u postgresql -u postgresql@<версия>-main -n 50 --no-pager
pg_lsclustersВывод pg_lsclusters содержит путь к журналу кластера. Прочитайте последние строки найденного файла:
sudo tail -n 50 "<путь к журналу>"На RHEL-подобных системах используйте имя установленной версионной службы:
sudo journalctl -u postgresql-<версия> -n 50 --no-pagerНа Windows откройте просмотр событий через Win + R:
eventvwr.mscНайдите сообщения PostgreSQL в журнале приложений за время неудачного запуска. Каталог данных можно определить по параметру запуска в свойствах службы. Откройте в нем postgresql.conf и найдите параметры журналирования:
logging_collector
log_directory
log_filenameЕсли logging_collector включен, log_directory задает каталог файлов журналов. Относительный путь отсчитывается от каталога данных. Например, значение log указывает на одноименную папку внутри него.
Для Homebrew проверьте состояние службы одной командой в Terminal:
brew services listНайдите строку своей формулы PostgreSQL. Состояние started означает запуск службы; error указывает на ошибку ее запуска.
В Postgres.app откройте сообщения запуска выбранного экземпляра. Ошибка порта или конфигурации обычно появляется сразу после попытки старта.
Не удаляйте каталог данных и не запускайте повторную инициализацию существующего кластера. Если ошибка появилась после правки конфигурации, восстановите копию файла и повторите запуск.
Популярное за неделю
- Как создать сайт самому в 2026: 4 способа + пошаговая инструкция 34 мин чтения
- Лучшие конструкторы для создания сайтов — плюсы, минусы и сравнения 22 мин чтения
- 7 бесплатных СУБД для управления базами данных 5 мин чтения
- Команды MySQL в консоли: от входа до бэкапа 15 мин чтения
- Модели баз данных: иерархическая, сетевая и реляционная 9 мин чтения
- Работа с датой и временем в MySQL 5 мин чтения
Комментарии