Как написать миграцию вниз для Postgresql, где миграция добавляет значение перечисления? - PullRequest
0 голосов
/ 08 мая 2018

Я хочу расширить свой тип перечисления, добавив новое значение перечисления. Это довольно просто сделать. Я также сохраняю весь свой SQL в миграциях и соединяю каждую восходящую миграцию с симметричной нисходящей миграцией, которая возвращает схему в предыдущее состояние.

Однако обратная операция - удаление варианта из enum - не поддерживается .

Какой распространенный метод для этого? Я вижу два варианта:

  1. Запишите миграцию "вверх" с предложением if not exists и ничего не делайте в миграции "вниз". Мне не нравится эта опция, потому что она нарушает предположение о том, что применение и возврат миграции оставляет схему в том же состоянии, что и раньше.
  2. Преобразование в новый тип enum при миграции "вниз", как описано в вопросе, связанном выше, - кажется излишним для такой простой операции.

1 Ответ

0 голосов
/ 09 ноября 2018

Вы не можете мигрировать ENUM. Ваши мнения и оценки верны на 100%.

Мне не нравится эта опция, потому что она нарушает предположение, что применение и возврат миграции оставляет схему в том же состоянии, в каком она была раньше.

Если это зависание, значит, опция отсутствует. Потому что ты прав.

кажется излишним для такой простой операции.

Это потому, что удаление значения из ENUM не простая операция. Так почему же перенос ENUM с большим количеством значений на один с меньшим количеством будет простой операцией?

Слушайте лошадь,

Еще один хороший пример того, почему перечисления обычно не очень хорошая идея. Это было бы очень легко, если бы вы использовали стандартную таблицу поиска с внешним ключом. Удаление значения так же просто, как выполнение оператора DELETE - a_horse_with_no_name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...