Доброго времени суток. Недавно начал изучать Go и дошел до работы с БД.
Обнаружил, что существующие механизмы миграции в Go отличаются от привычных механизмов в Python. Из существующих решений я видел ручные миграции через консоль и GORM-миграции.
О последних подробнее. Использую стандартный механизм, объявляю структуры-модели, пропихиваю их в AutoMigrate. Запуск автомиграций я инициализирую во время запуска приложения. Все работает замечательно, но когда я запускаю приложение второй раз (а с ним и миграции) они падают, потому что такие таблицы уже создавались (что логично). Или, например, если я добавляю или удаляю поле таблицы, вместо изменения этой таблицы происходит попытка вставить новую.
Пример запуска миграции:
var migrations = []interface{}{
&user.UserModel{},
&ticket.TicketModel{},
}
func RunMigration() {
CONNECTION.AutoMigrate(migrations...)
}
Пример ошибки:
ERROR: relation "XXXXXXXXX" already exists (SQLSTATE 42P07)
Вопрос: можно ли как-то поправить эту логику, чтобы не сбоило ошибками при каждом повторном запуске. Видел много примеров на гитхабе, где миграции запускаются в main.