Backups
ШІ-агент видалив мої дані в Supabase. Що можна відновити?
ШІ-агент видалив дані з вашої бази. Те, що ви зможете відновити, вирішилося раніше, а наступні хвилини вирішують, скільки з цього вціліє.
Коротко
- Якщо ШІ-агент видалив дані з вашої бази, відновити можна те, що було в останній копії, знятій до цього. Те, що з'явилося після неї, не записано більше ніде.
- Спершу зупиніть усе, що пише нові рядки. Відновлення прибирає все додане після копії, тож реєстрація, яка надійде зараз, стане рядком, який ви видалите власноруч.
- Агент не може повернути рядки. Він ніколи їх не тримав, а запустити його ще раз проти живої бази означає ще одну нагоду втратити більше.
Ви попросили агента прибрати кілька тестових рядків або полагодити міграцію, яка не хотіла застосуватися. Він сам написав SQL, запустив його проти проєкту, яким користується ваш живий застосунок, і повідомив, що готово. Застосунок і далі завантажується. Таблиця порожня.
Коли ШІ-агент видалив дані з вашої бази, те, що ви зможете відновити, вирішилося ще до його запуску. Наступні хвилини вирішують, скільки з цього вціліє.
Ось те місце, яке промахують майже всі відповіді на це питання. Вам радять відкотити код або попросити агента скасувати зроблене. Жодне з двох не торкається ваших даних, а поки ви пробуєте, єдине, що ще у ваших руках, тихо гіршає: те, що ваш застосунок просто зараз пише в базу.
Що можна відновити після того, як ШІ видалив мої дані?
Те, що було в останній копії вашої бази, знятій до видалення, і нічого з того, що з'явилося після неї.
Це вся відповідь, і більша її частина вирішилася кілька тижнів тому. Тут немає
жодного експертного кроку, немає чого розвидаляти, немає журналу, який чекав би
в Supabase, щоб його програли заново. Рядок, який прибрав DELETE або
DROP TABLE, зник із бази тієї миті, коли інструкція підтвердилася. Назад
повертається копія, а копія або існує, або ні.
Тож перед вами два завдання. З'ясувати, які копії існують. І не дати проміжку між найновішою з них і теперішнім моментом стати ще дорожчим, ніж він уже є.
Найперше: зупиніть усе, що пише в базу
Перш ніж шукати резервну копію, вимкніть усе, що пише нові рядки. Читання не заважає.
Причин дві, і друга людей заскочує.
Перша: відновлення не є злиттям. Повернути копію означає замінити таблиці, які в ній є, тим, що вони містили тоді, і все написане після неї піде разом з ними. Клієнт, який зареєструється за ту годину, поки ви це читаєте, стане рядком, який ви видалите власноруч, згодом, кроком, на який ви вже зважилися.
Друга: деякі шляхи гіршають, поки ви чекаєте. Відновлення на момент часу в Supabase повертає весь проєкт на обрану вами хвилину, тож що далі застосунок відходить від помилки, то більше справжньої роботи це повернення викидає разом зі шкодою.
Година за оголошенням про технічні роботи коштує дешево. Пояснювати комусь, що його замовлення створили, а потім навмисно прибрали, коштує значно дорожче.
Чи можна попросити агента скасувати це?
Ні. Він ніколи не тримав ваших рядків.
Агент написав інструкцію, а ваша база її виконала. Те, що він має тепер, залишається стенограмою тієї розмови, а стенограма відрізняється від копії таблиці. Попросіть його скасувати видалення, і ви отримаєте впевнену відповідь, правдоподібний SQL і жодних даних.
Про ризик варто сказати точно, бо прохання здається безневинним. Запустити агента ще раз означає другий безнаглядний сеанс проти живої бази, яка вже щось втратила. Якщо він вирішить, що зниклу таблицю найкраще полагодити, створивши нову, тепер на місці старої стоятиме нова порожня таблиця, а ви ускладнили опис втрати для того, хто допомагатиме вам наступним.
Заберіть його з проєкту, доки не зрозумієте, де ви стоїте. Те саме стосується історії версій вашого білдера: відкотити код до сьогоднішнього ранку означає відновити сторінки й лишити дані рівно там, де вони зараз, з причин, які варто зрозуміти один раз.
Де шукати, у такому порядку
Ідіть цим списком і спиніться на першому пункті, який у вас є. Він упорядкований за тим, скільки ваших даних повертається, а не за тим, наскільки це легко.
| Де шукати | Що може повернути | Що вже мало бути правдою |
|---|---|---|
| Відновлення Supabase на момент часу | База такою, якою вона була в обрану вами хвилину, зокрема ту, що перед видаленням | Платний тариф із докупленою опцією PITR, оформленою до сьогодні |
| Щоденна копія Supabase | База такою, якою вона була на останній автоматичній копії | Платний тариф |
| Керована служба резервних копій | База такою, якою вона була на останній перевіреній копії тієї служби | Ви під'єднали таку до сьогодні |
pg_dump, який ви зробили самі | Усе, що є у файлі, а він такий старий, як ваш останній спогад про нього | Файл існує й дописався до кінця |
| Таблиця м'якого видалення чи аудиту у застосунку | Лише ті рядки, облік яких ваш застосунок і так вів | Ви навмисно її так побудували |
| Історія версій вашого білдера | Нічого | Вона версіонує ваш код, а ваші дані живуть в іншій службі. |
| Спитати агента ще раз | Нічого | Він ніколи не тримав копії ваших рядків. |
Кожен шлях, який щось повертає, має ту саму вимогу, і саме вона вирішує справу: він мав існувати до видалення. Жоден із них не вмикається зараз і не дотягується назад. Ваш тариф Supabase вирішує щодо перших двох, а перевірка забирає близько двох хвилин.
Що повертається, а що падає в проміжок
Копія такою, якою вона була, і нічого з того, що сталося після неї.
Рядки, створені між тією копією й видаленням, не пошкоджені й не ховаються десь у незручному кутку. Їх ніколи не записували ніде, окрім бази, з якої їх прибрали. Це та частина, яку важко прийняти перед порожньою таблицею, бо втратити щось зазвичай означає, що воно ще десь є.
Наскільки широка ця смуга, залежить тільки від того, що знімало копії. Нічна копія може вмістити туди цілий робочий день. Відновлення на момент часу звужує смугу до хвилини, і це майже вся причина його окремої ціни. Дамп, який ви зробили того дня, коли згадали про нього, вміщує туди весь час, що минув відтоді.
Є варіант, у якому проміжок важить мало: застосунок, дані якого здебільшого ваш власний вміст і змінюються повільно. І є варіант, у якому він важить дуже багато: усе, де живуть замовлення, повідомлення чи реєстрації, де день рядків означає день людей, які це помітять.
Агент видалив частину, а не все
Тоді перед вами справжній вибір, і жодна з двох відповідей не є чистою.
Відновлення не повертає зниклі рядки, лишаючи решту в спокої. Воно замінює таблиці з копії тим, що ці таблиці містили тоді, повністю. Відновити означає повернути прибране агентом і водночас відкотити кожен добрий рядок, написаний відтоді. Не відновлювати означає зберегти добрі рядки й лишити діру.
Що правильно, залежить від того, скільки справжньої роботи лежить після копії. Якщо відповідь майже ніякої, відновлюйте й живіть далі. Якщо відповідь три дні клієнтських записів, зазвичай виграє повільніший шлях: спершу експортувати вцілілі рядки, відновити, а потім покласти експортовані рядки згори. Це марудно, і це єдиний шлях, який нічого не втрачає.
Це також аргумент за те, щоб скопіювати базу в її нинішньому зламаному стані, перш ніж торкатися чогось узагалі. Хоч би що ви вирішили, ви хочете мати змогу повернутися до того стану, з якого почали.
Як минає та сама година, коли копія вже є
Коротше, і це радше рішення, ніж пошук. Ви обираєте копію, дивитеся, що вона тримала, і натискаєте кнопку.
Саме це робить Reeve Care: перевірені копії вашої бази Supabase за розкладом, зашифровані й збережені поза вашим обліковим записом Supabase, а за ними відновлення в один клац. Перш ніж відновлення почнеться, воно знімає свіжу копію поточного стану, щоб і саме відновлення можна було скасувати.
Обмеження варто назвати тим самим подихом, бо знати їх означає мати змогу вирішити, чи це вам підходить:
- Воно копіює вашу базу даних, а також файли, які завантажили ваші користувачі, щойно ви під’єднаєте свої бакети Storage. Це необов’язково й потребує другого ключа.
- Сьогодні воно працює з Supabase і більше ні з чим.
- Ви відновлюєтеся до копії, яка існує, а не до будь-якої хвилини, яку назвете. У найгіршому разі ви втрачаєте один інтервал, тобто до однієї ночі на початковому тарифі й менше на двох вищих.
- Облікових записів для входу ніколи не торкаються. Нікого не розлогінюють, не видаляють і не повертають.
- Ключ до бази, який зберігається, вміє тільки читати, і це була обіцянка тоді, коли ви його під'єднали. Записати дані назад потребує того, який уміє писати, тож відновлення щоразу питає пароль вашої бази й не лишає жодного. Необов’язковий ключ до ваших файлів уміє писати, бо Supabase не видає для Storage ключів лише для читання, і сторінка, де ви його передаєте, каже про це заздалегідь.
Що покриває кожен тариф, написано на головній сторінці. Якщо ви
волієте не платити за це нічого, простий варіант того самого захисту це
pg_dump за розкладом, якого ви справді дотримуєтеся, збережений там, куди не
дотягнеться втрата вашого облікового запису Supabase.
Три шляхи й те, що проминає кожен із них
проходить це без продажної промови.
Цю саму годину показано, копія за копією, на сторінці резервних копій Supabase.
Що робити просто зараз
Що робити
- Зупиніть усе, що пише в базу. Це єдиний крок тут, який дорожчає, доки ви його відкладаєте.
- З'ясуйте, які копії існують, перш ніж щось вирішувати: спершу ваш тариф Supabase, потім будь-який дамп, який ви робили самі, потім те, чи веде ваш застосунок облік видалених рядків.
- Скопіюйте базу такою, якою вона є зараз, зламаною і всім іншим. Хоч би що ви робили далі, ви хочете мати шлях назад сюди.
- Після відновлення перевірте, чи застосунок ще може писати. База, яка правильно читає й відмовляє в insert, є наполовину завершеним відновленням, і доводить це лише insert.
- Коли нагальне мине, налаштуйте ту копію, яка перетворила б усе це на десятихвилинну справу замість цілого ранку.
Перш ніж закрити цю вкладку, відкрийте свій проєкт Supabase і дізнайтеся, чи хоч щось копіює вашу базу, а тоді запишіть, де ця копія лежить. Десятихвилинний чеклист безпеки покриває це разом з рештою того, що варто підтвердити у щойно запущеному застосунку.
Поширені запитання
ШІ-агент видалив рядки в моїй базі Supabase. Чи можна їх повернути?
Лише з копії, знятої до його запуску, тож найперше варто з'ясувати, чи існує така взагалі. Подивіться, що включає ваш тариф Supabase, потім пошукайте будь-який дамп, який ви робили самі, потім перевірте, чи ваш застосунок часом не веде облік видалених рядків. Якщо нічого з цього немає, рядки втрачено, і жодна робота над застосунком цього не змінить. З'ясуйте це, перш ніж записувати в базу щось нове.
Чи можна попросити агента повернути дані?
Ні. Агент ніколи не тримав ваших рядків. Він надіслав інструкцію вашій базі, і база її виконала, тож тепер він має стенограму розмови, а не копію таблиці. Прохання скасувати видалення дасть вам упевнену відповідь і жодних даних. А ще це означає другий безнаглядний сеанс проти бази, яка вже щось втратила.
Я на безкоштовному тарифі Supabase. Чи є там що відновлювати?
Від Supabase немає. Автоматичні копії починаються на платних тарифах, а відновлення на момент часу докуповується понад це, тож у безкоштовному проєкті ніде не лежить копія вчорашнього дня. Лишається дамп, який ви робили самі, або таблиця м
Чи лишати застосунок увімкненим, поки я думаю, що робити?
Вимкніть усе, що пише. Читання не заважає. Нові рядки шкодять двічі: відновлення копії прибирає все додане після неї, тож замовлення, яке надійде зараз, стане даними, які ви згодом видалите власноруч, а повернення на момент часу має тим більше справжньої роботи на викид, чим довше ви зволікаєте. Оголошення про технічні роботи на годину коштує менше, ніж друга втрата.
Агент видалив частину рядків, але не всі. Чи відновлювати все одно все?
Це незручний випадок, і чистої відповіді тут немає. Відновлення повністю замінює таблиці з копії, тож воно повертає втрачене й водночас відкочує кожен добрий рядок, написаний відтоді. Що обрати, залежить від того, скільки справжньої роботи лежить після копії. Якщо багато, повільніший шлях нічого не втрачає: спершу експортувати вцілілі рядки, відновити, а потім покласти експортовані рядки згори.