Этот вопрос специфичен для Sqitch, но может иметь отношение к другим инструментам управления миграцией баз данных.
Первое изменение Sqitch в моем приложении определяет его общую схему: оно создает все мои таблицы и определяет их столбцы.
Предположим, первое изменение называется appschema
, а одна из создаваемых им таблиц — lessons
со столбцами chapter
, section
и title
.
Теперь, спустя пару уже развернутых изменений, я хочу удалить столбец title
из таблицы lessons
.
Я запускаю sqitch add move_lesson_titles_out_of_db
и пишу сценарий deploy
этого изменения как
ALTER TABLE lessons DROP COLUMN title;
Я sqitch deploy
перенес это на свою локальную цель разработки, и все работает, как и ожидалось.
Но теперь sqitch verify dev
терпит неудачу, потому что сценарий проверки изменения appschema
пытается подтвердить существование столбца title
. До сих пор я мог запускать sqitch verify dev
, и все предыдущие изменения сохранялись. Возможно, это мое неправильное понимание, но у меня сложилось впечатление, что все изменения должны продолжать проверяться при запуске по порядку на правильно развернутой и обновленной цели Sqitch.
Я мог бы sqitch rework appschema
вместо того, чтобы добавлять изменение, но документация по Sqitch очень ясно, что как исходное, так и переработанное изменение должны быть идемпотентными, а поскольку appschema
содержит кучу CREATE TABLE
, это уже не идемпотент. Кроме того, если я правильно понимаю sqitch, развертывание этого переработанного appschema
вернет все мои изменения (поскольку это первое изменение в моем плане), обратно в пустую базу данных, а затем воспроизведет все обратно.
Я бы получил правильную схему, но за счет удаления всех данных. Очевидно, это не то, что я планирую делать на своей производственной цели.
Есть ли лучший способ добавить изменение, которое удаляет столбец, не обрекая sqitch verify
на сбой предыдущего изменения, которое создало этот столбец? Или это ошибка проверки по замыслу?
Если по замыслу, могу ли я каким-либо образом проверить многие другие вещи, которые делает appschema
изменение, но которые не изменились впоследствии (а именно, определение всего остального схемы моего приложения)?
sqtich verify
), поэтому, если кто-то проверит, что столбец есть, а другой проверит, что его нет, произойдет сбой, и этот вопрос задается здесь IIUC. - person singpolyma   schedule 02.03.2021