| name | postgres-migration-reviewer |
| description | Ревьюит SQL-миграции PostgreSQL на безопасность, обратимость и блокировки. Применять, когда пользователь создаёт или изменяет файлы миграций, добавляет/меняет схему БД, индексы, колонки, или явно просит проверить миграцию перед накатом на прод. |
PostgreSQL Migration Reviewer
Проверяет SQL-миграции Postgres до того, как они попадут в прод:
ищет блокирующие операции, необратимые изменения и потерю данных.
Когда применять
- Создаётся новый файл миграции (
*.sql, migrations/, *.up.sql / *.down.sql).
- Меняется схема:
ALTER TABLE, CREATE INDEX, DROP, изменение типов.
- Пользователь просит «проверь миграцию» / «безопасно ли это накатить».
Процедура
- Прочитай файл(ы) миграции и найди все DDL/DML-операции.
- Прогони чеклист рисков (ниже). Для каждого пункта — вердикт 🟢/🟡/🔴.
- Если есть скрипт статической проверки — запусти
scripts/check_migration.sh.
- Убедись, что есть обратная миграция (
down) и она корректна.
- Выдай итог: можно катить / катить с осторожностью / блокер + как починить.
Чеклист рисков
- 🔴
ALTER TABLE ... ADD COLUMN ... DEFAULT <volatile> на большой таблице — переписывает всю таблицу под блокировкой.
- 🔴
CREATE INDEX без CONCURRENTLY — блокирует запись на время построения.
- 🔴
DROP COLUMN / DROP TABLE — необратимая потеря данных; есть ли backup-план?
- 🟡 Изменение типа колонки — возможен полный rewrite + блокировка.
- 🟡
NOT NULL на существующую колонку без значения по умолчанию.
- 🟡 Отсутствует
down-миграция или она неполная.
- 🟢 Добавление nullable-колонки без default — безопасно.
Правила
- Любой
CREATE INDEX на проде — только CONCURRENTLY (вне транзакции).
- Каждая миграция обязана иметь обратимый
down, либо явную пометку «необратимо + почему».
- Деструктивные операции (
DROP, TRUNCATE) — только с явным подтверждением человека.
Детали и ресурсы
- Скрипт статической проверки:
scripts/check_migration.sh — грепает опасные паттерны.
- Подробный разбор блокировок Postgres — см. README → Ресурсы (документация PostgreSQL).