Проверено для sqlrs v0.1.1-rc.6Исходный код 1752abbb

Анализируйте миграции между ревизиями

Сравнивайте файловые входы и поднимайте состояния из коммитов и тегов с учётом ограничений diff.

Есть два разных вопроса

Какие входы изменились
sqlrs diff сравнивает пути и хэши содержимого входных файлов prepare.
Как работает старая ревизия
plan или prepare --ref читает входы из выбранного коммита или тега.

Сравните SQL между веткой и HEAD

sqlrs diff --from-ref origin/main --to-ref HEAD plan:psql -- -f db/prepare.sql

Команда отдельно собирает все связанные файлы в каждой ревизии, включая psql\i/\ir, и выводит добавленные, изменённые и удалённые входы. Для Liquibase она обходит связи между changelog-файлами:

sqlrs diff --from-ref v1.2.0 --to-ref HEAD prepare:lb -- update --changelog-file db/changelog.xml
Это не schema diff

diff не запускает движок или SQL и не сравнивает фактические схемы баз. Он не сравнивает план заданий, данные запроса prepare, alias-файлы, составные prepare/run-команды или run:*. Используйте его для контроля файловых входов, а влияние миграций подтверждайте созданием экземпляра и тестами.

Поднимите состояние из тега или коммита

sqlrs plan --ref v1.2.0 test-db
sqlrs prepare --ref v1.2.0 test-db

По умолчанию sqlrs создаёт временный detached worktree — отдельный checkout выбранной ревизии — и удаляет его после команды. Так сохраняется обычное поведение файлов, включая символические ссылки. Если рецепт не зависит от них, файлы можно читать напрямую из объектов Git без checkout:

sqlrs prepare --ref v1.2.0 --ref-mode blob test-db

Сохраните доказательство использованных входов

Флаг --provenance-path записывает JSON-файл с командой, выбранной Git-ревизией, хэшами входов, решением кэша и результатом plan или prepare. Основной вывод команды при этом не меняется:

sqlrs plan --ref v1.2.0 --provenance-path artifacts/v1.2.0-plan.json test-db

Артефакт не содержит DSN или токенов. Его можно сохранить вместе с результатами CI, чтобы позже установить, какой именно набор файлов использовался при проверке.

Проверка для pull request

  1. запустите diff от общей базовой точки или целевой ветки до HEAD;
  2. проверьте неожиданные добавления, удаления и включённые файлы;
  3. выполните plan --ref для старой и новой ревизии;
  4. создайте экземпляр новой ревизии и запустите интеграционные тесты;
  5. если нужно проверить обновление уже существующей базы, выполните его отдельным сценарием — diff такое обновление не моделирует.

Ограничения работы с Git-ревизиями

  • указанная ветка, метка или commit должны существовать в локальном Git-репозитории;
  • основной файл должен существовать на обеих сторонах diff;
  • prepare --ref должен дождаться завершения задания; вариант с --no-watch не поддерживается;
  • --ref работает только с одной стадией: составной prepare/run не поддерживается;
  • --ref-keep-worktree оставляет временный checkout для ручной диагностики; после проверки его придётся удалить самостоятельно.
Сохраните короткую карту диагностики

Большинство первых проблем обнаруживаются через status, ls, alias check и cache explain.

Открыть диагностику