Перейти к основному содержимому

phpPgAdmin — требования, установка и подключение

Разработчику

В первой статье раздела мы разобрали, что phpPgAdmin — PHP-клиент к PostgreSQL: браузер отправляет запросы на веб-сервер, PHP через расширение pgsql подключается к СУБД и возвращает HTML. Здесь — практика — какие версии нужны, куда положить файлы, как настроить config.inc.php и добиться успешного входа.

Установка сводится к трём шагам:

  1. Убедиться, что на машине есть PHP с pgsql и работающий PostgreSQL.
  2. Разместить файлы phpPgAdmin в каталоге, который обслуживает веб-сервер (document root или алиас).
  3. Настроить config.inc.php и сеть PostgreSQL (postgresql.conf, pg_hba.conf) так, чтобы PHP мог достучаться до сервера БД.

Права на объекты Postgres по-прежнему задаёт администратор СУБД через роли и GRANT. phpPgAdmin не создаёт своих учёток — он только проксирует введённый логин и пароль в PostgreSQL. Цепочка "браузер → веб-сервер → PHP → PostgreSQL" подробнее разобрана в статье 1; параллель для MySQL — phpMyAdmin, установка.


Словарь главы

ТерминКратко
pgsqlРасширение PHP для протокола PostgreSQL; без него phpPgAdmin не запустится
config.inc.phpЕдинственный конфиг приложения: список серверов, пути к pg_dump, флаги безопасности
listen_addressesПараметр postgresql.conf: на каких IP слушает Postgres
pg_hba.confПравила аутентификации: кто, с какого адреса и каким методом может подключиться
Роль (role)Учётная запись PostgreSQL; на форме входа указывают имя роли и пароль
defaultdbБаза для первого подключения — обычно postgres или template1
SCRAM-SHA-256Современный метод проверки пароля в pg_hba (рекомендуется вместо md5)
pg_dumpУтилита резервного копирования; phpPgAdmin вызывает её по пути из config

Требования

phpPgAdmin — зрелый, но менее активно развиваемый проект, чем phpMyAdmin. Перед установкой сверяйте версию релиза на GitHub Releases с вашей версией PHP и PostgreSQL.

Веб-сервер и PHP

Веб-сервер принимает HTTP-запросы и передаёт PHP-скрипты интерпретатору. phpPgAdmin работает там же, где и любой PHP-проект:

  • Apache — типичный выбор в XAMPP, Open Server, WAMP; через mod_php или прокси к PHP-FPM.
  • nginxroot или alias на каталог phpPgAdmin + fastcgi_pass к PHP-FPM; см. настройку веб-сервера для PHP.
  • IIS — Windows с FastCGI-модулем PHP.

PHP выполняет логику phpPgAdmin. Обязательные и рекомендуемые компоненты:

ТребованиеЗачем
Расширение pgsqlСвязь с PostgreSQL; без него — фатальная ошибка при старте
mbstringОбязателен с phpPgAdmin 7.12+ (многобайтовые строки, UTF-8)
sessionСессия входа между запросами
JSON, XMLЗависит от версии сборки (экспорт, конфигурация)

Проверка расширений в консоли:

php -m | findstr /i pgsql
php -m | findstr /i mbstring

На Linux/macOS вместо findstrgrep pgsql.

Для ветки 7.13.0 (2020): поддержка PHP 7.2+ (7.1 снята); в Issues обсуждали переход на PHP 8.x. На новых системах разумно ставить PHP 8.x и проверять совместимость в репозитории проекта.

pgsql и PDO

phpPgAdmin использует именно pgsql (функции pg_connect, pg_query), а не PDO. В своём приложении вы можете работать через PDO — это другой API, но подключение к тому же серверу Postgres и те же правила pg_hba.

PostgreSQL

PostgreSQL — сервер, к которому подключается phpPgAdmin. Версии должны пересекаться с поддержкой выбранного релиза phpPgAdmin:

Версия phpPgAdmin (ориентир)PostgreSQL
5.6 (2018)9.3 – 11, разработка под 12
7.12 – 7.13 (2019–2020)12 – 14

Версии PostgreSQL ниже 9.3 в современных ветках phpPgAdmin не тестировались (EOL). Установка Postgres в локальном стеке — 113, раздел PostgreSQL; углублённая настройка GUC — практикум 8.11/3.

Браузер

На стороне клиента нужны:

  • Cookies — сессия PHP;
  • JavaScript — интерфейс; в ветке 5.6+ тема на Bootstrap 3.

Список браузеров совпадает с требованиями Bootstrap 3 (Chrome, Firefox, Safari, Edge актуальных версий на момент выпуска темы).


Установка

Пакет Linux (Debian/Ubuntu)

Самый быстрый путь на сервере или в WSL:

sudo apt update
sudo apt install phppgadmin php-pgsql

Что происходит:

  • пакет phppgadmin кладёт PHP-файлы и сниппет для Apache;
  • php-pgsql подтягивает расширение pgsql для CLI и FPM;
  • конфигурация часто лежит в /etc/phppgadmin/config.inc.php, Apache подключает conf-available/phppgadmin.conf.

После установки откройте URL из документации дистрибутива (часто /phppgadmin) и проверьте, что страница не ругается на отсутствие pgsql.

Из исходников (GitHub)

Подходит, когда нужна свежая версия или нестандартный путь:

  1. Клонировать github.com/phppgadmin/phppgadmin или скачать архив релиза.
  2. Разместить каталог в document root или за алиасом /phppgadmin (как phpMyAdmin в 112).
  3. Скопировать conf/config.inc.php-dist в conf/config.inc.php (точный путь зависит от версии — сверяйте README репозитория).
  4. Ограничить доступ: Require local в Apache, allow 127.0.0.1 в nginx, VPN на проде — см. статью 4.

nginx

Типичная схема — root на каталог phpPgAdmin + location ~ \.php$ с fastcgi_pass к PHP-FPM. Каталог должен попадать в open_basedir, если ограничение включено в php.ini (иначе чтение config.inc.php или временных файлов импорта может падать).

Минимальный набросок (пути подставьте свои):

location /phppgadmin {
alias /var/www/phppgadmin;
index index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}

Файл config.inc.php

config.inc.php — центр настройки phpPgAdmin. Здесь задают список серверов PostgreSQL, подписи в UI, пути к pg_dump / pg_dumpall и флаги безопасности для shared-хостинга.

Массив серверов

Основная структура — $conf['servers'][$i]. Важное отличие от phpMyAdmin: индекс сервера начинается с 0, а не с 1.

Пример одного локального сервера (Windows, Open Server):

<?php
$conf['servers'][0]['desc'] = 'Локальный PostgreSQL';
$conf['servers'][0]['host'] = '127.0.0.1';
$conf['servers'][0]['port'] = 5432;
$conf['servers'][0]['defaultdb'] = 'postgres';
$conf['servers'][0]['username'] = ''; // пусто — ввод на форме входа
$conf['servers'][0]['password'] = '';

$conf['servers'][0]['pg_dump_path'] = 'C:/OpenServer/modules/PostgreSQL/bin/pg_dump.exe';
$conf['servers'][0]['pg_dumpall_path'] = 'C:/OpenServer/modules/PostgreSQL/bin/pg_dumpall.exe';

Разбор строк:

СтрокаСмысл
descПодпись в выпадающем списке серверов на странице входа
hostIP или DNS-имя; 127.0.0.1 надёжнее localhost (TCP, не путаница с сокетом)
portПорт Postgres, по умолчанию 5432
defaultdbБаза для первого подключения после входа; нужна любая существующая БД
username / passwordЕсли пусты — пользователь вводит роль на форме; иначе — фиксированный вход (осторожно на проде)
pg_dump_pathПолный путь к утилите дампа; без него экспорт в UI падает с "pg_dump not found"

На Linux пути обычно такие:

$conf['servers'][0]['pg_dump_path'] = '/usr/bin/pg_dump';
$conf['servers'][0]['pg_dumpall_path'] = '/usr/bin/pg_dumpall';

Узнать расположение: which pg_dump в терминале.

Несколько серверов и группы

Несколько экземпляров Postgres — элементы [0], [1], … с разными host / port / desc. С версии 5.1+ поддерживаются вложенные группы серверов в config (удобно на хостинге с десятками инстансов).

Флаги безопасности

Типичные опции (имена зависят от версии, см. config.inc.php-dist):

  • скрытие отчётов и админ-функций для ролей без суперправ;
  • фильтр "только свои" базы (owned databases only);
  • минимальная длина пароля при смене пароля роли через UI.

На локальной машине их часто не трогают; на shared-хостинге — включают по умолчанию в дистрибутивном пакете.


Подключение PostgreSQL к phpPgAdmin

title: "phpPgAdmin — требования, установка и подключение"

Локально (веб и БД на одной машине)

Сценарий Open Server / XAMPP / Docker на ноутбуке:

  1. В postgresql.conf: listen_addresses = 'localhost' (или '*', если нужен доступ по сети). Подробнее — 8.11/3.
  2. В pg_hba.conf — правило для локального TCP:
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 scram-sha-256
local all all peer

Что означают строки:

  • host — подключение по TCP/IP (именно его использует PHP pgsql при host = 127.0.0.1);
  • local — сокет Unix; peer сопоставляет OS-пользователя с ролью Postgres;
  • scram-sha-256 — современная проверка пароля; для старых клиентов иногда оставляют md5.
  1. Перезапуск PostgreSQL (pg_ctl reload или служба ОС).
  2. Проверка до phpPgAdmin:
psql -h 127.0.0.1 -U postgres -d postgres -c "SELECT version();"

Если psql подключается, а phpPgAdmin — нет, ищите проблему в PHP (pgsql, open_basedir) или в URL веб-сервера, а не в pg_hba.

Удалённый PostgreSQL

Когда PHP крутится на веб-сервере A, а Postgres на машине B:

На сервере БД (B):

  • listen_addresses = '*' или перечисление IP, включая адрес A;
  • в pg_hba.conf — строка с IP веб-сервера A, не 0.0.0.0/0 без firewall:
host all all 10.0.1.5/32 scram-sha-256

На веб-сервере (A) в config укажите host = IP или имя хоста B, не localhost: для PHP "localhost" — это сама машина A, а не B.

Безопасность

Не открывайте host all all 0.0.0.0/0 на проде без firewall и VPN. phpPgAdmin усиливает риск: под вошедшей ролью доступен полный SQL к разрешённым объектам. Меры — в статье 4 и практикуме 8.11.


Аутентификация

Аутентификация в phpPgAdmin — это проверка роли PostgreSQL и пароля сервером БД. Приложение передаёт введённые значения в libpq; метод проверки задаёт pg_hba.conf (scram-sha-256, md5, на dev иногда trust — только на изолированной машине).

Отдельного "пользователя phpPgAdmin" нет — в отличие от некоторых панелей, которые хранят свою таблицу логинов. Суперроль postgres видит все базы и системные каталоги; ограниченная роль — только объекты, на которые выдан GRANT. Модель ролей — PostgreSQL — практическая работа и API, практика CREATE ROLE — в статье 3.

На форме входа:

  • Server — элемент из $conf['servers'] (ваш desc);
  • Username — имя роли Postgres (postgres, app_user, …);
  • Password — пароль роли, не пароль от OS.

Типичные ошибки при первом входе

Сообщение / симптомВероятная причинаЧто проверить
Call to undefined function pg_connectНет расширения pgsqlphp -m, пакет php-pgsql, перезапуск FPM
could not connect to server: Connection refusedPostgres не слушает порт / неверный hostlisten_addresses, служба postgres, host/port в config
no pg_hba.conf entryIP клиента не разрешёнСтрока host в pg_hba для IP PHP-машины
password authentication failedНеверный пароль или методПароль роли, scram vs md5
pg_dump not found при экспортеПуть в configpg_dump_path, which pg_dump
Пустая страница / 500Синтаксис config, права на файлыЛог PHP-FPM, display_errors на dev

Подробный FAQ по дампам и лимитам PHP — статья 4.


Проверка установки

Чек-лист перед переходом к SQL, DDL и DML:

  1. php -m содержит pgsqlmbstring для 7.12+).
  2. Страница входа phpPgAdmin открывается без фатальной ошибки PHP.
  3. Вход под ролью с правами на defaultdb успешен.
  4. На вкладке SQL выполняется SELECT version(); — видна версия сервера.
  5. Экспорт таблицы не падает с "pg_dump not found" — пути в config верны.
  6. (Опционально) Второй сервер в config или удалённый хост — отдельная проверка psql с той же машины, где PHP-FPM.

Углублённая настройка GUC, autovacuum и мониторинг — 8.11/3. Базовый справочник по администрированию СУБД — 3.08/2.