LINUX.ORG.RU

А как программно и идиоматично создать таблицы в БД из миграций?

 , ,


0

1

Сделал я миграции с помощью goose, теперь надо это превратить в таблицы БД не задействуя goose напрямую. Собственно, вопрос как правильно, если лежат миграции будут в Root_project/migrations, например?

Да, документацию смотрел, но хочется пример от знающих для лучшего усвоения.

Всем спасибо.

Ответ на: комментарий от Begemoth

Я не уверен, что на той стороне гусь в принципе есть. А вот go mod download там точно выполняется. Поэтому надо как-то таблички из миграций именно программно создать.

LongLiveUbuntu ★★★★★
() автор топика

Не знаю что у тебя за бд и миграции, может это приложение для пользователя и sqlite. Но в сервисах не обязательно запускать миграции с той же машины, где запущен софт. Их можно запускать с другой машины подключаясь к БД по сети. Идеоматически у тебя есть какой-то раннер в CI/CD, который при сборке и раскатке новой версии приложения сразу применяет миграции.

masa ★★★
()
Последнее исправление: masa (всего исправлений: 1)

Если ваша приложуха на Go, то выше разумный совет - использовать goose как библиотеку и в коде вашей программы вызывать миграции. Можно даже заэмбеддить файлы миграции в бинарь в виде fs.FS.

Как вариант, есть https://github.com/golang-migrate/migrate Но там интересный нюанс, если говорить о Postgresql. Их мигратор берет advisory lock перед началом работы, если запустите несколько инстансов приложения, все может тупо повиснуть (наступал лично, лол).

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

Расскажите подробнее, как деплоится приложение, может возникнут дополнительные мысли.

paddlewan
()

Хорошей практикой является разделение процесса миграции и запуска приложения. Если есть требование не использовать отдельную утилиту, то как правило собирают отдельное приложение, которое непосредственно и делает миграцию.

amm ★★
()