[{"data":1,"prerenderedAt":302},["ShallowReactive",2],{"blog-uk-version-history-is-not-a-backup":3},{"id":4,"title":5,"body":6,"category":265,"cover":266,"coverAlt":266,"description":267,"draft":268,"extension":269,"faq":270,"image":283,"keywords":284,"meta":290,"navigation":291,"ogTitle":292,"path":293,"published":294,"seo":295,"stem":296,"tldr":297,"updated":294,"__hash__":301},"blog_uk\u002Fblog\u002Fversion-history-is-not-a-backup.md","Історія версій не є резервною копією. Вона не поверне таблицю.",{"type":7,"value":8,"toc":253},"minimark",[9,13,16,24,29,32,35,38,42,45,48,51,55,58,133,139,142,146,149,152,168,171,175,178,181,184,188,191,196,205,208,216,220,240],[10,11,12],"p",{},"Щось зламалося, тож ви зробили розумну річ. Відкрили історію версій у Lovable\nчи Bolt, знайшли ранкову версію й натиснули відновити. Застосунок повернувся\nточно таким, яким був.",[10,14,15],{},"Дані не повернулися.",[10,17,18,19,23],{},"Ось те місце, де люди спотикаються: ",[20,21,22],"strong",{},"ваш код і ваші дані живуть як дві окремі\nсистеми, і кнопка скасування є лише в однієї з них."," Ваш білдер зберігає\nкреслення застосунку. Ваша база даних тримає те, що всередині. Історія версій\nбездоганно відбудовує креслення, до останньої деталі, і повертає вам ідентичну\nпорожню будівлю.",[25,26,28],"h2",{"id":27},"чи-створює-історія-версій-мого-білдера-копію-моєї-бази-даних","Чи створює історія версій мого білдера копію моєї бази даних?",[10,30,31],{},"Ні. Вона зберігає ваш код, а ваші дані живуть зовсім деінде.",[10,33,34],{},"Lovable, Bolt, v0, Replit, Cursor та інші ведуть історію файлів вашого проєкту:\nсторінок, компонентів, логіки, оформлення. Це і є креслення. Відновлення версії\nпереписує ці файли такими, якими вони були в обраний вами день.",[10,36,37],{},"Ваша база даних працює як інший сервіс, майже завжди Supabase, на власному акаунті.\nНіщо в історії вашого проєкту туди не дістає. Відновлення не має жодної думки\nпро ваші дані, бо не може їх побачити.",[25,39,41],{"id":40},"чому-код-і-дані-лежать-у-двох-різних-місцях","Чому код і дані лежать у двох різних місцях",[10,43,44],{},"Бо ваші дані мають пережити те, що ваш код робить постійно: зміни.",[10,46,47],{},"Ваш код перебудовується щоразу, коли ви публікуєте. Якби замовлення ваших\nкористувачів жили всередині нього, вони стиралися б щоразу, коли ви лагодите\nкнопку. Тому ці двоє тримаються окремо, і навмисно: код замінний, а дані ні, і\nсаме тому їх версіонують різні інструменти.",[10,49,50],{},"Ціна цього розділення і є темою цієї статті. Кожен інструмент, який версіонує\nодне, сліпий до іншого. Ваш білдер не поверне таблицю, а ваша база даних не\nповерне зламану сторінку.",[25,52,54],{"id":53},"що-насправді-відбувається-під-час-відкату","Що насправді відбувається під час відкату",[10,56,57],{},"Ваші екрани повертаються до колишнього вигляду. Ваші дані не рухаються взагалі.",[59,60,61,74],"table",{},[62,63,64],"thead",{},[65,66,67,71],"tr",{},[68,69,70],"th",{},"Що",[68,72,73],{},"Під час відкату коду",[75,76,77,86,93,105,115,125],"tbody",{},[65,78,79,83],{},[80,81,82],"td",{},"Сторінки, компоненти, оформлення",[80,84,85],{},"Відновлено",[65,87,88,91],{},[80,89,90],{},"Логіка застосунку та її виправлення",[80,92,85],{},[65,94,95,98],{},[80,96,97],{},"Таблиця, яку хтось видалив",[80,99,100],{},[101,102,104],"key-verdict",{"type":103},"danger","Лишається видаленою",[65,106,107,110],{},[80,108,109],{},"Рядки, які перезаписав скрипт",[80,111,112],{},[101,113,114],{"type":103},"Лишаються перезаписаними",[65,116,117,120],{},[80,118,119],{},"Стовпець, який прибрала міграція",[80,121,122],{},[101,123,124],{"type":103},"Лишається прибраним",[65,126,127,130],{},[80,128,129],{},"Файли, які завантажили ваші користувачі",[80,131,132],{},"Без змін в обидва боки",[134,135],"diagram",{"alt":136,"caption":137,"src":138},"Три кроки поспіль. Спершу код версії п'ять із шістьма рядками даних, позначений галочкою. Далі той самий код, усі шість рядків зникли, позначено хрестиком. Потім код відмотано до версії три й позначено галочкою, а шість рядків так само відсутні й так само позначені хрестиком.","Відкат влучає в код і більше ні в що. Відмотати креслення до версії три не поверне рядки на місце.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Frollback-timeline-1600x680.png",[10,140,141],{},"Рядок про міграцію дивує найбільше. Міграція, яку ви запустили проти своєї бази,\nвже сталася: вона живе в базі, а не у вашому репозиторії, і скасувати файл, що\nїї описував, нічого не змінить.",[25,143,145],{"id":144},"де-це-справді-кусає","Де це справді кусає",[10,147,148],{},"У ті десять хвилин після помилки, коли ви шукаєте скасування й виявляєте, що\nйого немає.",[10,150,151],{},"Форми, яких це набуває, цілком буденні:",[153,154,155,159,162,165],"ul",{},[156,157,158],"li",{},"Видалення в редакторі таблиць Supabase, що зачепило більше рядків, ніж ви\nхотіли.",[156,160,161],{},"Міграція за допомогою ШІ, яка прибрала стовпець, щоб зникла помилка типів.",[156,163,164],{},"Скрипт наповнення чи скидання, спрямований на бойовий проєкт замість\nтестового.",[156,166,167],{},"Прибирання того, що виглядало як тестові дані, а виявилося чиїмось справжнім\nакаунтом.",[10,169,170],{},"Жодна з цих речей не торкається жодного рядка вашого коду. Кожна з них\nпереживає відкат неушкодженою, і саме тому відкат здається таким, що нічого не\nзробив. Він зробив рівно те, що робить.",[25,172,174],{"id":173},"для-чого-історія-версій-справді-добра","Для чого історія версій справді добра",[10,176,177],{},"Для чималого, і це варто сказати прямо, бо відповідь тут не «ні для чого».",[10,179,180],{},"Це справжнє скасування для справжніх проблем: зміна оформлення, про яку ви\nшкодуєте, публікація, що зламала сторінку, правка ШІ, яка переписала робочий\nекран на гірше, функція, що зрештою зробила застосунок складнішим. Усе це живе\nу вашому коді, і для цього вона працює саме так, як обіцяно.",[10,182,183],{},"Проблема полягає в тихому припущенні, що її робота покриває все. Такого припущення\nніхто не робить навмисне; воно те, з чим ви лишаєтеся, коли ніхто не сказав вам,\nщо систем дві.",[25,185,187],{"id":186},"як-здобути-справжнє-скасування-для-ваших-даних","Як здобути справжнє скасування для ваших даних",[10,189,190],{},"Його треба покласти туди самому. Тобто копію бази даних, зняту за розкладом і\nзбережену там, куди втрата акаунта не дотягнеться.",[134,192],{"alt":193,"caption":194,"src":195},"Дві часові лінії. На лінії коду стрілка сама повертається від найновішої точки до попередньої. На лінії бази даних та сама стрілка замикається лише тоді, коли проходить крізь збережений файл.","Обидві вміють повертатися назад. Різниця в тому, що скасування вашого коду прийшло разом із білдером, а скасування ваших даних існує тільки тоді, коли копію туди кладете ви.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Ftwo-undo-paths-1600x600.png",[10,197,198,199,204],{},"Зробити це можна трьома способами, вони коштують різних грошей і різної уваги,\nі кожному бракує того, що покривають інші.\n",[200,201,203],"a",{"href":202},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Три способи зробити резервну копію бази Supabase","\nпроходить усі три, зокрема той, який більшості варто увімкнути першим, і\nпричину, чому самого його замало.",[10,206,207],{},"Саме для цього є й Reeve Care: копії вашої бази Supabase за розкладом, збережені\nпоза вашим акаунтом Supabase і перевірені, перш ніж зарахуватися. Під’єднайте свої бакети Storage — і\nфайли, завантажені вашими користувачами, поїдуть разом, тож відновлення поверне\nрядки й зображення, на які вони вказують.",[10,209,210,211,215],{},"Що містить така копія і що насправді робить кнопка — на ",[200,212,214],{"href":213},"\u002Fsupabase-backups","сторінці резервних\nкопій Supabase",".",[25,217,219],{"id":218},"що-зробити-цього-тижня","Що зробити цього тижня",[221,222,223],"key-takeaways",{},[153,224,225,228,231,234,237],{},[156,226,227],{},"З'ясуйте, чи щось узагалі зараз копіює вашу базу даних. Не код. Базу даних. Якщо відповідь шукається довше за хвилину, відповідь «ні».",[156,229,230],{},"Увімкніть резервну копію, яку включає ваш тариф Supabase. Вона захищає від ваших власних помилок, а саме про цю поломку й ідеться.",[156,232,233],{},"Тримайте ще одну копію деінде, бо копія, що живе всередині акаунта, не допоможе, якщо ви втратите акаунт.",[156,235,236],{},"Копіюйте завантажені файли окремо. Вони не лежать ані у вашому коді, ані у вашій базі.",[156,238,239],{},"Відновіть одну копію в тимчасовий проєкт, щоб перше читання того файлу не припало на день, коли він потрібен.",[10,241,242,243,247,248,252],{},"Перш ніж закрити цю вкладку, відкрийте свій проєкт Supabase і подивіться, чи\nувімкнено резервні копії. Ця одна перевірка і є вся сьогоднішня робота.\n",[200,244,246],{"href":245},"\u002Fchecklist","10-хвилинний чеклист безпеки"," охоплює її разом з рештою того, що\nварто підтвердити у щойно запущеному застосунку, а\n",[200,249,251],{"href":250},"\u002Fis-your-supabase-app-safe","посібник із безпеки Supabase"," проходить по тому, що\nще зазвичай лишається відкритим.",{"title":254,"searchDepth":255,"depth":255,"links":256},"",3,[257,259,260,261,262,263,264],{"id":27,"depth":258,"text":28},2,{"id":40,"depth":258,"text":41},{"id":53,"depth":258,"text":54},{"id":144,"depth":258,"text":145},{"id":173,"depth":258,"text":174},{"id":186,"depth":258,"text":187},{"id":218,"depth":258,"text":219},"Backups",null,"Lovable і Bolt ведуть історію версій вашого коду. Ваша база даних працює як окремий сервіс, тож відкат назад не поверне ваші дані.",false,"md",[271,274,277,280],{"q":272,"a":273},"Я випадково видалив таблицю. Чи можна її повернути?","Лише з копії, зробленої до видалення, тож перше, що варто з'ясувати: чи є така копія взагалі. Відкат коду цього не зробить, і ваш білдер теж. На платному тарифі Supabase є щоденні копії та відновлення на момент часу, якщо ви його додали. На безкоштовному тарифі автоматичного немає нічого. Перевірте, що ви маєте, перш ніж міняти будь-що інше: деякі шляхи назад ускладнюються, щойно поверх прогалини починають писатися нові дані.",{"q":275,"a":276},"Чи робить Lovable резервні копії моєї бази Supabase?","Ваш білдер зберігає версії файлів проєкту. Ваша база даних працює як окремий сервіс на вашому власному акаунті Supabase, і ніщо в історії проєкту туди не дістає. Білдери додають нові можливості, тож дивіться документацію саме свого, а не припускайте в той чи інший бік. Але виходьте з того, що відповідь «ні», доки не прочитаєте, що «так».",{"q":278,"a":279},"Чи є моя історія Git резервною копією?","Ні, рівно з тієї самої причини, з якої нею не є історія версій. Git стежить за файлами, з яких збирається ваш застосунок. Він жодного разу не бачив жодного рядка ваших даних і не може повернути жоден. Репозиторій і база даних відрізняються за своєю природою, хоча обидва звуться «ваш проєкт».",{"q":281,"a":282},"Мої дані на місці. Чи треба щось робити сьогодні?","Сьогодні найдешевший день, коли ви це налаштуєте, бо даних мало, а важить те, щоб звичка існувала до того, як стане потрібною. Втрати, які болять, рідко бувають драматичними. Це помилково набрана команда під час нічного ремонту, у проєкті, де реальних користувачів рівно стільки, щоб почати з нуля вже не вийшло.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",[285,286,287,288,289],"історія версій lovable","історія версій резервна копія бази","відновити видалену таблицю supabase","відкат коду відновлення даних","відновити дані vibe coded застосунку",{},true,"Історія версій не є резервною копією бази даних","\u002Fblog\u002Fversion-history-is-not-a-backup","2026-08-10",{"title":5,"description":267},"blog\u002Fversion-history-is-not-a-backup",[298,299,300],"Історія версій відновлює ваш код. Вона ніколи не торкається бази даних, а саме там живуть ваші користувачі, їхній вміст і їхні замовлення.","Тобто видалена таблиця, перезаписаний рядок чи невдала міграція переживають відкат цілком неушкодженими.","У вашого коду скасування вбудоване. У ваших даних воно є лише тоді, коли ви його туди покладете.","xC4W-3YP1OY8-zdwsJxhtfzb6uX5xOkdUN9c5wpIcSw",1787826051171]