Несколько месяцев назад я работал допоздна, и мне нужно было создать новый столбец для таблицы postgres. Я добавил столбец через командную строку, используя стандартные команды heroku / postgres. Я быстро понял, насколько это глупо, удалил столбец, а затем создал необходимую миграцию, чтобы добавить его.
Недавно я взял это приложение laravel и создал конвейер с ним в качестве производственного приложения. Я создал новое промежуточное приложение и настроил для него базу данных. Когда я запустил миграции, я получил сообщение об ошибке, что столбец уже существует. Как вы уже догадались, это та же самая колонка, с которой я раньше напортачил.
Поскольку миграция завершилась неудачно после создания базы данных, я смог удалить соответствующий столбец, повторно запустить миграцию, и все было в порядке. Я не понимаю, почему столбец уже существует, кроме предположения, что это был какой-то артефакт моего добавления его вручную (при миграции не было ошибок).
Меня беспокоит, что эта же ошибка произойдет, когда я отправлю промежуточный код в рабочую среду и мне придется перезапустить свои миграции. Очевидно, что в производственном приложении я не могу просто удалить рассматриваемый столбец, поскольку в нем есть данные.
Есть ли идеи относительно того, почему это могло произойти, и что я могу сделать, чтобы исправить проблему, если она возникает, когда я отправляю код в производство?
Проверить все миграции. Если он создает столбец в новой среде, значит, он должен быть в одной из старых миграций. Один из способов тестирования - создать новую базу данных и запустить миграции без той, которая создает новый столбец. Если вы его получаете, вам нужно сохранить его только в одном файле.
Взгляните на github.com/beckenrode/…. Если вас устраивает база данных тестовой среды, вы также можете создавать все миграции с нуля. Этот модуль работает вместе с MySQL Workbench.
Я тщательно проверил файлы миграции, и не было смысла добавлять столбец дважды. Миграции работали после того, как я удалил столбец. Должно быть, это был артефакт добавления столбца вручную.






Я бы посмотрел на ваши файлы миграции и убедился, что столбец не добавляется более одного раза.