PHPFlowPHP, MySQL, Laravel и JavaScript

Установка PostgreSQL на Windows и Ubuntu: psql, pgAdmin 4 и первая база

Обновлено:

Коротко

Установка PostgreSQL на Windows делается официальным инсталлятором с postgresql.org: он ставит сервер, службу, консоль psql и pgAdmin 4. В Ubuntu достаточно команды sudo apt install postgresql, после чего вход в базу выполняется через sudo -u postgres psql. Дальше остаётся создать своего пользователя и базу и подключить к ним приложение. Ниже все шаги по порядку, команды psql и решения ошибок, из-за которых служба не запускается.

Содержание
  1. Какую версию PostgreSQL ставить
  2. Установка PostgreSQL на Windows 10 и 11
  3. Установка PostgreSQL на Ubuntu и Debian
  4. Первый вход: sudo -u postgres psql
  5. Создание пользователя и базы данных
  6. Установка и настройка pgAdmin 4
  7. Установка PostgreSQL в Docker
  8. Подключение к PostgreSQL из PHP и Laravel
  9. Ошибки при установке и запуске PostgreSQL

Какую версию PostgreSQL ставить

Для установки PostgreSQL в ноябре 2026 года основной выбор - PostgreSQL 18: это текущая стабильная ветка, которая получает исправления раз в квартал. PostgreSQL 19 к середине ноября находится на стадии релиз-кандидата, выход финальной версии запланирован на конец месяца; для рабочих проектов имеет смысл подождать первого минорного обновления. Каждая основная версия поддерживается пять лет, поддержка PostgreSQL 14 закончилась 12 ноября 2026 года - на ней новые проекты начинать не стоит.

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

Внутри одной ветки (18.1, 18.2 и далее) обновление ставится поверх без переноса данных. Переход между основными версиями, например с 16 на 18, требует pg_upgrade или выгрузки и загрузки дампа. Сроки поддержки всех версий опубликованы на странице postgresql.org/support/versioning.

Установка PostgreSQL на Windows 10 и 11

PostgreSQL для Windows скачивается со страницы postgresql.org/download/windows: ссылка "Download the installer" ведёт на сборку EDB. Нужна 64-битная Windows 10 или 11 и учётная запись с правами администратора.

  1. Скачайте установщик postgresql-18.x-windows-x64.exe и запустите его от имени администратора.
  2. Оставьте папку установки по умолчанию: C:\Program Files\PostgreSQL\18.
  3. В окне "Select Components" оставьте отмеченными PostgreSQL Server, pgAdmin 4 и Command Line Tools; Stack Builder можно снять.
  4. Папку данных ("Data Directory") не меняйте или укажите путь только из латинских букв без пробелов.
  5. Задайте пароль суперпользователя postgres и запишите его - без него в базу не войти.
  6. Порт оставьте 5432, если на компьютере нет другого PostgreSQL.
  7. В "Advanced Options" выберите локаль Russian, Russia или оставьте "[Default locale]".
  8. Нажмите "Next" до начала установки и дождитесь окончания; в последнем окне снимите флажок запуска Stack Builder и нажмите "Finish".
Окно Select Components установщика PostgreSQL
Выбор компонентов в установщике PostgreSQL для Windows: сервер, pgAdmin 4 и консольные утилиты

Как открыть PostgreSQL после установки

Отдельного окна у сервера нет: он работает в фоне как служба Windows. Для работы с базами в меню "Пуск" появляются два ярлыка в папке "PostgreSQL 18":

  • "SQL Shell (psql)" - консоль; на вопросы Server, Database, Port и Username нажимайте Enter, затем введите пароль postgres;
  • "pgAdmin 4" - графическая панель в отдельном окне.

Чтобы запускать psql из любой командной строки, добавьте C:\Program Files\PostgreSQL\18\bin в переменную PATH: "Параметры" → "Система" → "О системе" → "Дополнительные параметры системы" → "Переменные среды" → Path → "Изменить" → "Создать". После этого откройте новое окно терминала.

Окно SQL Shell psql в Windows после установки PostgreSQL
Первый запуск SQL Shell (psql) в Windows: значения по умолчанию и пароль, заданный при установке

Если psql в Windows пишет "Кодовая страница консоли (866) отличается от основной страницы Windows (1251)", а русские буквы выводятся крякозябрами, выполните перед запуском chcp 1251 или работайте в Windows Terminal с PowerShell.

Как запустить и остановить службу PostgreSQL в Windows

Служба называется postgresql-x64-18 и по умолчанию стартует вместе с Windows. Управлять ей можно в оснастке "Службы" (Win + R → services.msc) или из PowerShell, запущенного от администратора:

# Состояние службы
Get-Service postgresql-x64-18

# Запуск, остановка и перезапуск
Start-Service postgresql-x64-18
Stop-Service postgresql-x64-18
Restart-Service postgresql-x64-18

Установка PostgreSQL на Ubuntu и Debian

В Ubuntu 24.04, 26.04 и Debian 12/13 PostgreSQL есть в штатном репозитории. Команда ниже ставит ту версию, которую выбрали разработчики дистрибутива (в Ubuntu 24.04 это PostgreSQL 16):

sudo apt update
sudo apt install postgresql postgresql-contrib

# Проверить версию и работу службы
psql --version
sudo systemctl status postgresql

Свежая версия из репозитория PostgreSQL

Если нужна последняя ветка, подключите официальный репозиторий проекта (PGDG). В пакете postgresql-common есть скрипт, который делает это одной командой:

  1. Установите пакет: sudo apt install -y postgresql-common.
  2. Подключите репозиторий: sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh и подтвердите нажатием Enter.
  3. Поставьте нужную версию: sudo apt install -y postgresql-18.
  4. Проверьте список кластеров: pg_lsclusters - у кластера 18/main должен быть статус online.
Установка PostgreSQL 18 в Ubuntu и вход через sudo -u postgres psql
Установка PostgreSQL на Ubuntu из репозитория PGDG и проверка, что кластер запущен

Конфигурация в Debian и Ubuntu лежит в /etc/postgresql/18/main/: postgresql.conf - параметры сервера, pg_hba.conf - правила, кто и как может подключаться. Данные хранятся в /var/lib/postgresql/18/main.

Первый вход: sudo -u postgres psql

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

# Войти в psql от имени системного пользователя postgres
sudo -u postgres psql

# Задать пароль роли postgres (понадобится pgAdmin и приложениям)
\password postgres

В Windows аналог - psql -U postgres: ключ -U задаёт роль, а пароль вы указали при установке. Флаг -h localhost принудительно включает подключение по сети вместо сокета, это полезно, когда peer-аутентификация мешает войти под другой ролью.

Основные команды psql

КомандаЧто делает
\lСписок баз данных
\c shopПодключиться к базе shop
\dtСписок таблиц текущей базы
\d usersСтруктура таблицы users
\duСписок ролей (пользователей)
\conninfoК какой базе и под кем вы подключены
\xВертикальный вывод широких строк
\qВыйти из psql

Команды с обратной косой чертой - это команды самого psql, точка с запятой им не нужна. Обычные SQL-запросы, наоборот, заканчиваются ;, иначе psql ждёт продолжения и меняет приглашение с =# на -#.

Создание пользователя и базы данных

Работать приложению под суперпользователем postgres не стоит. Создайте отдельную роль-владельца и базу для проекта:

-- Роль с правом входа и паролем
CREATE ROLE shop_user WITH LOGIN PASSWORD 'Hq7#vR2m!pZ4';

-- База, владельцем которой будет эта роль
CREATE DATABASE shop OWNER shop_user ENCODING 'UTF8';

-- Проверка
\l shop
\du shop_user

Владелец базы может создавать в ней таблицы в схеме public. С PostgreSQL 15 обычные роли больше не получают это право автоматически, поэтому при ошибке "permission denied for schema public" проверьте, что база принадлежит нужной роли, или выдайте право явно: GRANT CREATE ON SCHEMA public TO shop_user;. Те же действия в консоли Linux делаются утилитами createuser и createdb:

sudo -u postgres createuser --pwprompt shop_user
sudo -u postgres createdb --owner=shop_user shop

# Проверить вход новой ролью по паролю
psql -h localhost -U shop_user -d shop

Если вы раньше работали с MySQL, сравните с тем, как там устроены пользователи и права: в PostgreSQL вместо пары "имя@хост" есть роли, а откуда разрешено подключаться, задаёт файл pg_hba.conf.

Подключение к PostgreSQL с другого компьютера

  1. В postgresql.conf замените #listen_addresses = 'localhost' на listen_addresses = '*'.
  2. В конец pg_hba.conf добавьте строку для своего IP: host shop shop_user 203.0.113.25/32 scram-sha-256.
  3. Перезапустите сервер: sudo systemctl restart postgresql.
  4. Откройте порт 5432 в файрволе только для этого адреса.

Установка и настройка pgAdmin 4

В Windows pgAdmin 4 ставится вместе с сервером, если не снять его в списке компонентов. В Ubuntu его нет в штатном репозитории: используйте официальный репозиторий проекта pgAdmin (пакеты pgadmin4-desktop для окна на компьютере и pgadmin4-web для доступа через браузер) или Docker-образ dpage/pgadmin4.

  1. Запустите pgAdmin 4 и при первом запуске задайте мастер-пароль - им шифруются сохранённые пароли серверов.
  2. В дереве слева щёлкните правой кнопкой по "Servers" и выберите "Register" → "Server...".
  3. На вкладке "General" введите любое имя, например Local 18.
  4. На вкладке "Connection" укажите Host name localhost, Port 5432, Username postgres и пароль, отметьте "Save password".
  5. Нажмите "Save" - сервер появится в дереве со списком баз.
Окно Register Server в pgAdmin 4
Регистрация локального сервера в pgAdmin 4: вкладка Connection с хостом, портом и пользователем postgres

Создать базу данных в pgAdmin 4: правой кнопкой по "Databases" → "Create" → "Database...", имя и владелец на вкладке "General", затем "Save". Посмотреть таблицы: раскройте "База" → "Schemas" → "public" → "Tables". Писать запросы удобнее в "Query Tool" (меню "Tools" → "Query Tool" или Alt + Shift + Q), выполнение - клавишей F5.

Установка PostgreSQL в Docker

Для разработки сервер удобно поднять в контейнере - ничего не ставится в систему, а версию легко сменить:

docker run -d --name pg18 \
  -e POSTGRES_USER=shop_user \
  -e POSTGRES_PASSWORD=secret \
  -e POSTGRES_DB=shop \
  -p 5432:5432 \
  -v pgdata:/var/lib/postgresql \
  postgres:18

# Войти в psql внутри контейнера
docker exec -it pg18 psql -U shop_user -d shop

Обратите внимание на путь тома: начиная с образа postgres:18 данные хранятся в подпапке с номером версии внутри /var/lib/postgresql, поэтому том монтируют на эту папку, а не на /var/lib/postgresql/data, как в старых версиях. Как собрать PHP, веб-сервер и базу в одном compose.yaml, разобрано в статье про Docker для PHP.

Подключение к PostgreSQL из PHP и Laravel

PHP работает с PostgreSQL через расширение pdo_pgsql. В Windows (XAMPP, своя сборка PHP) раскомментируйте в php.ini строки extension=pdo_pgsql и extension=pgsql и перезапустите веб-сервер; где лежит нужный файл, подскажет статья о расположении php.ini. В Ubuntu установите пакет: sudo apt install php8.4-pgsql (номер - ваша версия PHP).

<?php
declare(strict_types=1);

// Подключение к PostgreSQL через PDO
$dsn = 'pgsql:host=127.0.0.1;port=5432;dbname=shop';

$pdo = new PDO($dsn, 'shop_user', 'Hq7#vR2m!pZ4', [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

$stmt = $pdo->prepare('SELECT id, name FROM products WHERE price > :price');
$stmt->execute(['price' => 1000]);
print_r($stmt->fetchAll());

Код запросов почти не отличается от работы с MySQL через PDO, меняется только DSN. В Laravel 12 и 13 достаточно поправить .env:

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=shop
DB_USERNAME=shop_user
DB_PASSWORD=Hq7#vR2m!pZ4

После этого php artisan migrate создаст таблицы уже в PostgreSQL.

Ошибки при установке и запуске PostgreSQL

ОшибкаПричинаКак исправить
Problem running post-install step / database cluster initialisation failedКириллица или пробелы в пути данных, нет прав у службы на папкуПереустановите с папкой данных вида C:\pgdata
Не удалось запустить службу postgresql-x64-18Занят порт 5432, повреждена папка data, мешает антивирусПосмотрите лог в data\log, освободите порт или смените его
"psql" не является внутренней или внешней командойПапка bin не добавлена в PATHДобавьте ...\PostgreSQL\18\bin в Path или используйте "SQL Shell (psql)"
password authentication failed for user "postgres"Неверный пароль ролиВойдите через sudo -u postgres psql и выполните \password
Peer authentication failed for userСистемное имя не совпадает с рольюПодключайтесь с -h localhost или поправьте метод в pg_hba.conf
could not find driver (PHP)Не включено расширение pdo_pgsqlВключите расширение и перезапустите веб-сервер

Узнать, что именно мешает службе стартовать в Windows, проще всего по журналу: откройте последний файл в папке C:\Program Files\PostgreSQL\18\data\log или "Просмотр событий" → "Журналы Windows" → "Приложение". Занят ли порт, покажет команда netstat -ano | findstr 5432. В Linux смотрите sudo journalctl -u postgresql@18-main.

Если вы забыли пароль postgres в Windows, временно замените в pg_hba.conf метод scram-sha-256 на trust для строк localhost, перезапустите службу, задайте новый пароль через \password postgres и сразу верните scram-sha-256 обратно.

Когда сервер работает, можно переходить к запросам: синтаксис SELECT и соединений таблиц в PostgreSQL почти такой же, как в MySQL, а FULL JOIN здесь поддерживается напрямую - примеры в статье о JOIN в SQL.

Частые вопросы

Как открыть PostgreSQL после установки?

Сервер работает как служба в фоне. Для работы откройте "SQL Shell (psql)" или "pgAdmin 4" из меню "Пуск", в Linux выполните sudo -u postgres psql.

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

Пароля по умолчанию нет. В Windows его задают при установке, в Ubuntu роль входит через peer без пароля, а пароль ставится командой \password postgres.

Почему не удалось запустить службу PostgreSQL при установке?

Обычно мешают кириллица в пути к папке данных, занятый порт 5432 или антивирус. Посмотрите лог в папке data\log и переустановите с путём вида C:\pgdata.

Как узнать версию PostgreSQL?

В консоли выполните psql --version, а версию работающего сервера покажет запрос SELECT version();.

Нужно ли ставить pgAdmin отдельно?

В Windows он входит в установщик PostgreSQL. В Ubuntu pgAdmin 4 ставится из репозитория проекта pgAdmin или запускается в Docker.

Как подключиться к PostgreSQL из PHP?

Включите расширение pdo_pgsql и используйте DSN pgsql:host=127.0.0.1;port=5432;dbname=имя в PDO. В Laravel укажите DB_CONNECTION=pgsql в .env.