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

phpPgAdmin — что это и где встретить

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

phpPgAdmin — инструмент с открытым исходным кодом (лицензия GPL), написанный на PHP. Он даёт графический доступ к задачам администрирования PostgreSQL: создание баз и схем, выполнение SQL, управление ролями, дампы через pg_dump. В репозитории phppgadmin/phppgadmin проект описан как "premier web-based administration tool for PostgreSQL".

phpPgAdmin — не отдельная СУБД и не замена серверу PostgreSQL. Это клиент: тонкий слой между вами и уже запущенным экземпляром Postgres. Тот же результат можно получить в консоли psql, в pgAdmin 4, DBeaver или из PHP-кода через PDO — phpPgAdmin переводит клики и формы в SQL-запросы и показывает ответ сервера в HTML.

Роли вместо пользователей MySQL

На странице входа phpPgAdmin указываются имя роли и пароль PostgreSQL (часто postgres на локальной машине). Приложение не заводит своих учёток — только проксирует аутентификацию в СУБД. Управление ролями делается через пункт "Roles" или SQL (CREATE ROLE, GRANT — см. PostgreSQL — практика и SQL, DDL и DML).

pgAdmin и phpPgAdmin

В промышленных и учебных средах для PostgreSQL чаще встречают pgAdmin 4 (отдельное приложение, не PHP). phpPgAdmin остаётся полезен там, где уже есть LAMP/PHP-стек и нужен лёгкий веб-клиент без установки pgAdmin — см. сравнение в истории веб-админок.


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

ТерминКратко
СУБДСервер PostgreSQL, который хранит данные и выполняет SQL
Клиент БДПрограмма, подключающаяся к СУБД: phpPgAdmin, psql, pgAdmin, PDO
pgsqlРасширение PHP для протокола PostgreSQL; им пользуется phpPgAdmin
Роль (role)Учётная запись Postgres: может иметь LOGIN, права на объекты, членство в группах
Схема (schema)Пространство имён внутри базы: public, app, audit — таблицы живут в схеме
pg_hba.confФайл правил аутентификации: кто с какого IP может подключиться и как
ДампРезервная копия через pg_dump / pg_dumpall, не plain SQL как у mysqldump
DDL / DMLЯзыки определения структуры и изменения данных — подробнее в статье 3

Зачем phpPgAdmin разработчику

На локальной машине phpPgAdmin решает три практические задачи:

  • Быстро посмотреть данные — открыть таблицу в схеме public, отсортировать строки, отредактировать поле без скрипта.
  • Проверить схему — индексы, типы столбцов, sequences, триггеры видны в дереве объектов и на вкладках структуры.
  • Выполнить ad-hoc SQL — проверить запрос из приложения, посмотреть план через EXPLAIN (углублённо — Оптимизация SQL-запросов, практикум 8.11).

Для продакшена тот же инструмент опасен: полный доступ к данным через браузер. На серверах phpPgAdmin либо не ставят, либо закрывают за VPN, IP whitelist и HTTPS — подробнее в статье 4.


Как устроена работа

Цепочка запроса типична для PHP-приложения, работающего через HTTP:

КомпонентРоль
БраузерHTML-интерфейс, JavaScript; в ветке 5.6+ тема на Bootstrap 3
Веб-серверОтдаёт файлы phpPgAdmin и передаёт запросы в PHP — см. настройку веб-сервера
PHP + pgsqlПодключение pg_connect, выполнение SQL через pg_query
PostgreSQLПорт 5432 по умолчанию; аутентификация по pg_hba.conf и паролю роли

Удалённый доступ возможен, если в postgresql.conf задан listen_addresses и в pg_hba разрешены подключения с IP веб-сервера — см. конфигурацию Postgres и статью 2.

Что происходит при одном клике

  1. Браузер отправляет HTTP POST (форма входа, кнопка "Execute" на вкладке SQL).
  2. Веб-сервер передаёт запрос интерпретатору PHP.
  3. Скрипт phpPgAdmin открывает соединение через pgsql и отправляет SQL на сервер PostgreSQL.
  4. СУБД проверяет роль, права на объект (схему, таблицу) и выполняет запрос.
  5. PHP собирает HTML-таблицу или сообщение об ошибке и отдаёт его браузеру.

Связь с сервером БД идёт через расширение pgsql (аналог mysqli у phpMyAdmin). phpPgAdmin можно разместить на той же машине, что и PostgreSQL, или на отдельном хосте с сетевым доступом к порту 5432.

Разбор — минимальное подключение на PHP

Под капотом phpPgAdmin делает то же, что и ваш код, только с десятками экранов поверх:

<?php
$conn_string = 'host=127.0.0.1 port=5432 dbname=postgres user=postgres password=secret';
$conn = pg_connect($conn_string);
if (!$conn) {
die('Ошибка подключения');
}

$result = pg_query($conn, 'SELECT datname FROM pg_database WHERE datistemplate = false');
while ($row = pg_fetch_assoc($result)) {
echo $row['datname'] . "\n";
}
pg_close($conn);
Строка / фрагментСмысл
$conn_string = 'host=...'Параметры DSN: хост, порт, база, роль, пароль — аналог полей формы входа
pg_connect(...)Устанавливает сессию клиента; без неё SQL некуда отправить
SELECT datname FROM pg_databaseСлужебный запрос — список баз; на главной phpPgAdmin вы видите тот же результат
datistemplate = falseИсключает служебные шаблоны template0 и template1
pg_fetch_assocПострочное чтение ответа; в интерфейсе это превращается в HTML-таблицу

В реальном приложении используйте PDO с подготовленными запросами, а не конкатенацию SQL — phpPgAdmin рассчитан на администратора, который осознанно пишет произвольный SQL.


Что умеет интерфейс

По истории релизов и описанию пакетов, типичный набор:

  • создание и удаление баз и схем;
  • таблицы, представления, sequences, индексы, триггеры, функции на PL/pgSQL;
  • выполнение произвольного SQL, в том числе пакетами;
  • pg_dump / pg_dumpall через настройку путей в config.inc.php;
  • управление ролями и правами (GRANT / REVOKE);
  • просмотр данных с сортировкой, работа с bytea, JSON/JSONB (в новых ветках);
  • несколько серверов в одной установке ($conf['servers']);
  • темы, в том числе bootstrap (с 5.6);
  • полнотекстовый поиск (расширения в ветке 5.x).

Актуальность функций зависит от версии phpPgAdmin и PostgreSQL на сервере. Подробности по операциям — в SQL, DDL и DML и дампы, роли и FAQ.

Разбор — типичный SQL во вкладке SQL

После входа в базу shop разработчик часто выполняет такой набор (диалект PostgreSQL):

Код ITЗагрузка примера кода…

ЗапросЧто делает в phpPgAdmin
information_schema.tablesСписок таблиц в схеме — то же, что раскрытие узла public в дереве
SELECT ... FROM public.ordersЯвная схема public; без неё Postgres ищет объект в search_path
INSERT ... RETURNING idВозвращает сгенерированный ключ из sequence — удобнее, чем отдельный SELECT currval

phpPgAdmin не проверяет бизнес-логику приложения: если у роли есть право DELETE, одна команда DELETE FROM orders удалит все строки. Права задаёт администратор СУБД через роли, не интерфейс — см. транзакции и блокировки.


В каких стеках встречается

phpPgAdmin реже встроен в локальные пакеты, чем phpMyAdmin: типичные стеки XAMPP и Open Server идут с MySQL, а Postgres ставят отдельно. Зато на Linux-серверах пакет phppgadmin — обычное дополнение к LAMP + PostgreSQL.

Стек / средаphpPgAdminКак получить доступПримечание
Open Server (OSP)Обычно нет в стандартной поставкеPostgreSQL через psql или pgAdminПодробнее — 113, PostgreSQL
XAMPP / WAMPНет из коробкиТолько MySQL/phpMyAdminPostgres и phpPgAdmin — вручную или Docker
Debian / UbuntuПакет phppgadminURL из конфига Apache, часто /phppgadminКонфиг в /etc/phppgadmin/
FreeBSD / GentooПорт phppgadminПо документации порта
Arch Linuxphppgadmin в community/etc/webapps/phppgadmin/config.inc.php
DockerОбраз или ручная сборка поверх php:apacheПроброс порта 80/443См. пример ниже
Ручная установкаGit / архив с GitHubDocument root или алиас /phppgadminНужны PHP pgsql, mbstring
Локальный PostgreSQL в OSP

Типичное подключение: хост 127.0.0.1, порт 5432, роль postgres, пароль по настройке панели. Веб-интерфейс phpPgAdmin после установки — по своему URL (например /phppgadmin на виртуальном хосте). База по Postgres — в локальной среде PHP.

Разбор — phpPgAdmin рядом с Postgres в Docker Compose

Изолированная среда без установки Postgres на хост — типичный фрагмент docker-compose.yml:

Код ITЗагрузка примера кода…

ПараметрЗачем
postgres:16Сервер БД; phpPgAdmin подключается к хосту db внутри сети Compose
POSTGRES_USER / PASSWORDРоль для входа в phpPgAdmin — те же значения в форме логина
volumes: ./phppgadminКаталог с GitHub; в config.inc.php указывают host=db, не localhost
ports: "8080:80"Интерфейс доступен по http://localhost:8080

В config.inc.php для контейнера web хост сервера — имя сервиса db, не 127.0.0.1 хост-машины. Полная настройка — в статье 2.


phpPgAdmin и phpMyAdmin — ключевые отличия

Если вы уже знакомы с phpMyAdmin, полезно держать в голове параллель и расхождения:

ТемаphpMyAdminphpPgAdmin
СУБДMySQL, MariaDBPostgreSQL
PHP-драйверmysqlipgsql
Иерархия объектовDatabase → TableDatabase → Schema → Table
УчёткиMySQL usersRoles (роли с LOGIN)
АвтоинкрементAUTO_INCREMENTSERIAL / sequence + RETURNING
ДампSQL export / mysqldumppg_dump, custom format, directory
Индекс серверов в configс 1с 0
Активность (2020+)Регулярные релизы 5.xРелиз 7.13.0 (2020), далее реже

Сравнение интерфейса удобно вести параллельно: phpMyAdmin — SQL и DDL/DML и phpPgAdmin — SQL и DDL/DML. Общая история обеих линий — статья 5 phpMyAdmin.


Первый вход

Пошагово — от запуска стека до списка баз на экране:

  1. Убедитесь, что PostgreSQL запущен (pg_isready -h 127.0.0.1 -p 5432 или служба в панели стека).
  2. Проверьте расширение PHP pgsql: php -m | findstr pgsql (Windows) или php -m | grep pgsql (Linux/macOS).
  3. Откройте URL установки phpPgAdmin.
  4. Введите имя роли и пароль PostgreSQL.
  5. Выберите сервер в списке, если в config.inc.php настроено несколько в $conf['servers'].

Если что-то пошло не так

СимптомВероятная причинаЧто проверить
"Your PHP installation does not support PostgreSQL"Нет расширения pgsqlПакет php-pgsql, строка extension=pgsql в php.ini
"Login failed" / отказ в доступеНеверная роль/пароль или правило pg_hbapg_hba.conf, метод md5/scram-sha-256, перезагрузка Postgres
"could not connect to server"Сервер не слушает порт или неверный хостlisten_addresses, firewall, 127.0.0.1:5432
Пустой список базУ роли нет CONNECT на базыGRANT CONNECT, вход под postgres локально
Белый экранFatal error PHPЛоги Apache/nginx, mbstring для phpPgAdmin 7.12+

Ошибка "Your PHP installation does not support PostgreSQL" однозначно указывает на отсутствие pgsql — переустановите PHP с php-pgsql или включите расширение в php.ini. Параметры $conf['servers'] и pg_hba разбираются в следующей статье.


История

Кратко: проект начался как WebDB (2002), публичные 0.5/0.6 — декабрь 2002, переименование в phpPgAdmin — ветка 3.0.0-dev-1. Линия 7.x (2019–2020) добавила PHP 7.x и PostgreSQL 12–14.

Параллельная линия для MySQL — MySQL-WebadminphpMyAdmin; общие корни веб-админок на PHP, разные драйверы (mysqli и pgsql).

Полная таблица эпох, сравнение с pgAdmin и Adminer — в статье История веб-админок БД на PHP. Краткое определение — в глоссарии.


См. также


Следующий шаг

Требования, установка и подключение — версии PHP и PostgreSQL, файл config.inc.php, pg_hba.conf, listen_addresses и несколько серверов в $conf['servers'].

Теория SQL и типы Postgres — PostgreSQL — практическая работа и API; после phpPgAdmin — практикум PostgreSQL 8.11.