Команда db
db управляет подключениями к БД и генерацией схемы: ping проверяет соединения,
migrate создаёт таблицы из атрибутов сущностей, sql показывает сгенерированный
DDL без выполнения.
Команда живёт на пакете winter-ppa
Слой базы данных в ядро не входит — он ставится отдельно. Без него db не работает
целиком, включая ping: любая субкоманда отвечает и не выполняется.
The 'db' command needs the database layer, which is not installed.
Add it with: composer require flytachi/winter-ppaОтказ полный, а не частичный, намеренно. Работай половина субкоманд — вывод был бы «команда сломана», и искать причину пошли бы не туда. Не работает ничего и сказано почему — вывод «не хватает пакета», и это правда.
call db --help печатается и без пакета: именно из справки видно, что это за команда и
зачем ставить зависимость. Строку Requires она показывает всегда, а когда пакета нет —
дополнительно предупреждает.
Что такое db и зачем
db — консольный интерфейс к базе данных проекта.
Проблема. Нужно проверять, что приложение достаёт до БД, и поднимать схему на новой машине. Делать это внешними утилитами и вручную — лишние шаги.
Решение. db даёт проверку связи и генерацию схемы прямо из кода проекта — по
всем сконфигурированным подключениям. Об этом и раздел.
Субкоманды
| Субкоманда | Назначение |
|---|---|
ping |
Подключиться к каждой конфигурации, показать драйвер, DSN, задержку и статус |
migrate |
Выполнить DDL (сгруппированный по типам) |
sql |
Напечатать DDL в stdout без выполнения (предпросмотр) |
pool |
Показать загрузку пула соединений работающего сервера |
php call db ping
php call db sql # предпросмотр
php call db migrate # выполнитьФлаги фаз (migrate и sql)
Выбирают, какие части схемы генерировать. Без флагов — все пять:
| Флаг | Фаза | Примечание |
|---|---|---|
-e |
Extensions | только pgsql |
-s |
Schemes | только pgsql |
-t |
Tables | — |
-i |
Indexes | — |
-c |
Constraints | FK, CHECK |
php call db migrate # все фазы
php call db migrate -t -i # только таблицы + индексыОбласть (плагины)
| Опция | Область |
|---|---|
| (нет) | Приложение (Project) |
--plugin=<name> |
Один плагин |
--plugins |
Все плагины |
php call db migrate --plugin=bill
php call db sql --plugin=bill -sping всегда пингует всё
Опции --plugin / --plugins действуют только на migrate и sql. Команда
db ping всегда проверяет приложение и все плагины, игнорируя эти опции.
Поведение миграции
- Выполняются только
#[Migratable]-конфиги, в порядке приоритета High → Normal → Low. - Идемпотентно: ошибки «объект уже существует» превращаются в
[EXIST], а не[FAILED](pgsql42P06/42P07/42710, mysql42S01/42000). - При
DEBUG=trueв ответе виден текст SQL-ошибки для[FAILED].
Полные правила генерации схемы, опт-ин и ограничения — на странице Миграции.
db pool — загрузка пула
php call db poolMainMainDbConfig
active 12 · idle 3 · total 15 · maximum 20 · workers 2
saturated 1 of 2 workers [SATURATED]
per worker
worker#0 MainMainDbConfig active=2 idle=3 total=5 max=10 age=0s
worker#1 MainMainDbConfig active=10 idle=0 total=10 max=10 age=3sСмотреть нужно на строки воркеров, а не на общий итог: запрос ждёт освобождения в пуле своего воркера, поэтому один забитый воркер — это реальные задержки, даже когда суммарно места достаточно.
Данные приходят от работающего сервера
Консоль — отдельный процесс и в память сервера заглянуть не может, поэтому воркеры
сами публикуют статистику по таймеру (PPA_POOL_TELEMETRY, по умолчанию 5 секунд).
Если сервер не запущен или ещё ни разу не открывал соединение, команда честно скажет, что телеметрии нет. Подробнее — как устроен пул.
Дальше
- Миграции — как из сущностей получается схема
- Подключение к БД — классы
DbConfig,#[Migratable] - Консоль — обзор