@thdxr It depends, they must be guided to work efficiently, sometimes it fights a simple npm run dev for 10 minutes because the port is already taken or any random config has the wrong state.
no falcon rocket ever achieved rapid reusability, it still takes a few days or weeks for inspection.
What are realistic alternative landing methods like runway, catch by another aircraft, giant net, or soft foam?
Why is the tower catch not an expensive stunt?
Is this thing is supposed to carry passengers like that?
Можно по різному, але +- простий безпечний піхід для звичайної бази може бути такий.
1. Просто але з повним даунтаймом, тобто не приймаємо нові інсерти від юзерів.
- Міграція створює нову колонку і одразу робить її бекфіл через insert from select.
- Знімаємо даунтайм після деплой нової версії
2. Без дауннтайму трохи складніше але не неможливо
- така сама міграція з бекфілом
- далі обслуговуєте на рівні коду запис в дві колоники, з читанням з нової з фаллбеком на стару, аж переконаємось що все ок
- в наступній версії - робимо повний перехід на нову + потрібні дропи
Наголовніше не забувати про можливий ро��лбек, бо це 90% відвовідей на всі кейси.
сам підхід і краще розумення BC варто трохи запозичити від Stripe API, які можна теж поширити на схему бази.
- https://t.co/8gyvrj4UHC
- https://t.co/VEryykmhCK
- теж цікаво в контексті ролбеків "no down migration" https://t.co/md3oto4xeb
Працюючи з базами в проекти додав статичний тест які взагалі забороняє всі деструктивні операції на базі в міграціях, особливо ті що ламають backward compatibility.
Наприклад не можна робити дроп колонок взагалі. Не можна змінити тип а ні назву.
Якщо така операція дуже потрібна то робити її можна принаймні в дві міграції, а ще краще в два послідовні деплої, якщо зміна в базі руйнує компатибільність з кодом.
Збільшення з varchar(64) до 225 умовно безпечне, в вашому typescript це всеодно string, коли rust чи go можуть інакше обробляти типи АЛЕ зміну типу з varchar - json теж так просто вже не відкатити, перехідний етап у дві колонки, бекфіл, BC повинні зберігатися принаймні протягом двох послідовних версій додатку.
Від третьої версії можна пробувати робити деструкви на колонках, таблицях які не використовуються або перевірені і позначені як deprecated або до повного видалення.
@giraffender@DrizzleORM реально ген��руєте такі деструктивні міграції?
Це б могли бути дві міграції, додаєм нову колонку, робимо бекфілл, потім свап назви.