phpPgAdmin — SQL, DDL и DML
В PostgreSQL объекты живут внутри схемы (чаще всего public). phpPgAdmin отражает это в дереве слева: база → схема → таблица. Команды SQL те же, что в psql и на SQL-тренажёре, но синтаксис отличается от MySQL.
Синтаксис SELECT, JOIN и агрегатов — 107, 55, 6. Практикум на схеме магазина — 111.
Где выполнять SQL
| Место | Контекст |
|---|---|
| Вкладка SQL на сервере | Любые запросы |
| SQL внутри базы / схемы / таблицы | Уже выбран search_path или объект |
| История (History) | Повтор ранее выполненных запросов (в поддерживаемых версиях) |
Поддерживаются пакетные запросы (несколько команд через ;). Результаты SELECT — таблица с сортировкой по клику на заголовок столбца (с 3.x).
Базы и схемы (DDL)
Создание базы
Интерфейс: «Создать базу данных» на уровне сервера.
SQL:
CREATE DATABASE shop
ENCODING 'UTF8'
LC_COLLATE 'ru_RU.UTF-8'
LC_CTYPE 'ru_RU.UTF-8'
TEMPLATE template0;
TEMPLATE template0 нужен, если кодировка отличается от шаблона по умолчанию.
Схемы
CREATE SCHEMA app AUTHORIZATION app_owner;
SET search_path TO app, public;
В phpPgAdmin схемы видны под базой; можно изменить владельца схемы, экспортировать схему отдельно (функция зрелых 5.x).
Удаление
DROP DATABASE shop;
DROP SCHEMA app CASCADE;
CASCADE снимает зависимые объекты — используйте осознанно.
Таблицы, индексы, ограничения (DDL)
Создание таблицы
Мастер задаёт столбцы, типы (integer, varchar, text, timestamptz, jsonb…), NOT NULL, PRIMARY KEY, UNIQUE, CHECK, FOREIGN KEY.
SQL:
CREATE TABLE app.users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
meta JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
BIGSERIAL создаёт связанную sequence — в дереве она отображается отдельно.
Изменение структуры
| Задача | SQL |
|---|---|
| Добавить столбец | ALTER TABLE app.users ADD COLUMN name text; |
| Тип / ограничение | ALTER TABLE ... ALTER COLUMN ... |
| Индекс | CREATE INDEX idx_users_email ON app.users (email); |
| FK | ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY ... |
| Удалить таблицу | DROP TABLE app.users CASCADE; |
phpPgAdmin поддерживает каскадное удаление столбцов и ограничений (с 3.0-beta).
Представления, функции, триггеры
Создание и правка через соответствующие разделы (с 3.0 — триггеры, функции с volatility, setof). Код отображается в редакторе; для сложной логики удобнее хранить определения в миграциях репозитория.
Данные — DML
Просмотр
Browse — постраничный просмотр; длинные строки можно развернуть; сортировка по столбцу.
Вставка
Форма Insert или:
INSERT INTO app.users (email) VALUES ('user@example.com')
RETURNING id;
RETURNING — идиоматично для PostgreSQL.
Обновление и удаление
UPDATE app.users SET email = 'new@example.com' WHERE id = 1;
DELETE FROM app.users WHERE id = 1;
Редактирование строки в UI требует уникального ключа или OID (в старых версиях PG) — иначе browse/edit ограничен.
Sequences
SELECT nextval('app.users_id_seq');
ALTER SEQUENCE app.users_id_seq RESTART WITH 100;
В интерфейсе — отдельный узел sequence с операциями create/alter.
Роли и права (DCL)
В PostgreSQL роль может быть «пользователем для входа» и/или группой.
CREATE ROLE app_reader LOGIN PASSWORD 'secret';
GRANT CONNECT ON DATABASE shop TO app_reader;
GRANT USAGE ON SCHEMA app TO app_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA app TO app_reader;
phpPgAdmin предоставляет формы Grant/Revoke на базы, схемы, таблицы, функции; с 3.0 — массовый revoke нескольким ролям.
Раздел «Роли» на сервере — аналог «Учётных записей» в phpMyAdmin, но модель ролей PG, не mysql.user.
Сводка DDL / DML / DCL
| Категория | Примеры | UI phpPgAdmin |
|---|---|---|
| DDL | CREATE, ALTER, DROP (DB, SCHEMA, TABLE, INDEX) | Мастера + SQL |
| DML | SELECT, INSERT, UPDATE, DELETE | Browse, Insert, SQL |
| DCL | GRANT, REVOKE, CREATE ROLE | Privileges, Roles |
Отличия от phpMyAdmin при тех же задачах
| Задача | MySQL (phpMyAdmin) | PostgreSQL (phpPgAdmin) |
|---|---|---|
| Автоинкремент | AUTO_INCREMENT | SERIAL / IDENTITY |
| Строковые типы | DATETIME | TIMESTAMPTZ |
| Идентификаторы | обратные кавычки ` | двойные кавычки " для регистра |
| Движок таблицы | InnoDB / MyISAM | нет «движков», только access method |
| Пользователи | MySQL User accounts | Roles |
Связь с PHP (PDO)
$dsn = 'pgsql:host=127.0.0.1;port=5432;dbname=shop';
$pdo = new PDO($dsn, 'app_user', 'secret', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
$pdo->exec('SET search_path TO app, public');
См. работа с БД из PHP — драйвер pgsql в DSN.
Следующий шаг
EXPLAIN ANALYZE на вкладке SQL — первый шаг к оптимизации 8.11 и главам 881, 884.
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Веб-админка PostgreSQL на PHP: архитектура, pgsql, отличия от phpMyAdmin, Debian, Docker и локальные стеки. PHP с pgsql, PostgreSQL 9.3+, config.inc.php, pg_hba.conf, listen_addresses и несколько серверов. pg_dump и pg_dumpall, лимиты PHP, extra_float_digits, сравнение с pgAdmin и типичные ошибки pgsql.phpPgAdmin — что это и где встретить
phpPgAdmin — требования, установка и подключение
phpPgAdmin — дампы, безопасность и FAQ