CLI · Winter Console

Команда db

db управляет подключениями к БД и генерацией схемы: ping проверяет соединения, migrate создаёт таблицы из атрибутов сущностей, sql показывает сгенерированный DDL без выполнения.

Субкоманды ping · migrate · sqlСхема из #[Migratable] конфигов

Что такое db и зачем

db — консольный интерфейс к базе данных проекта.

Проблема. Нужно проверять, что приложение достаёт до БД, и поднимать схему на новой машине. Делать это внешними утилитами и вручную — лишние шаги.

Решение. db даёт проверку связи и генерацию схемы прямо из кода проекта — по всем сконфигурированным подключениям. Об этом и раздел.

Субкоманды

Субкоманда Назначение
ping Подключиться к каждому конфигу, показать драйвер/DSN/задержку/статус
migrate Выполнить DDL (сгруппированный по типам)
sql Напечатать DDL в stdout без выполнения (предпросмотр)
bash
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
bash
php call db migrate          # все фазы
php call db migrate -t -i     # только таблицы + индексы

Область (плагины)

Опция Область
(нет) Приложение (Project)
--plugin=<name> Один плагин
--plugins Все плагины
bash
php call db migrate --plugin=bill
php call db sql --plugin=bill -s

ping всегда пингует всё

Опции --plugin / --plugins действуют только на migrate и sql. Команда db ping всегда проверяет приложение и все плагины, игнорируя эти опции.

Поведение миграции

  • Выполняются только #[Migratable]-конфиги, в порядке приоритета High → Normal → Low.
  • Идемпотентно: ошибки «объект уже существует» превращаются в [EXIST], а не [FAILED] (pgsql 42P06/42P07/42710, mysql 42S01/42000).
  • При DEBUG=true в ответе виден текст SQL-ошибки для [FAILED].

Полные правила генерации схемы, опт-ин и ограничения — на странице Миграции.

Дальше