Перейти до вмісту

Backups

Чому ви не можете завантажити резервну копію Supabase

Завантажити резервну копію Supabase на сучасному проєкті не вийде: щоденна копія там фізична. Як це перевірити і як тримати власну копію.

Vlad Tkachenko10 хв читання
Чотири щоденні знімки бази даних у корпусі Supabase, передній підсвічений і запечатаний, поруч порожній сірий лоток для завантаження.

Коротко

  • Ви не можете завантажити резервну копію Supabase на проєкті з Postgres 15.8.1.079 або новішим. Щоденні копії там є фізичними знімками: Supabase може відновити їх для вас, а завантажити їх ви не можете.
  • Кнопка завантаження, яку описують старіші інструкції, належала логічним резервним копіям, тобто SQL-файлам. Вона є лише в проєктах, що досі на старіших версіях.
  • Щоб мати власний файл, ви самі робите логічний дамп через Supabase CLI або pg_dump. Це єдина копія, яка переживе втрату доступу до облікового запису.

Ви на платному тарифі Supabase, отже, резервні копії у вас є. Ви відкриваєте Database, потім Backups, і ось вони: список щоденних копій із датами, у кожної кнопка Restore. Ви шукаєте кнопку, яка дозволить завантажити резервну копію Supabase і тримати її десь у себе, а її немає.

Нічого не зламано. Ось що старіші інструкції досі подають неправильно: на сучасному проєкті немає щоденної резервної копії, яку можна завантажити. Supabase перевів свої щоденні копії на інший тип резервних копій, такий, який він може відновити для вас і не може вам віддати. Кнопка завантаження з тих інструкцій належала старому типу. Файл, який лежить у вас, тепер ви робите самі, і це інший тип файлу.

Найпростіше уявити різницю на прикладі телефона. Резервна копія, яку він щоночі робить сам собі, повна й точна, і за один крок повертається на телефон, що увійшов у той самий обліковий запис. Відкрити її на ноутбуці й витягти звідти фотографії ви не можете. Щоб мати фотографії, які можна зберігати будь-де, ви їх експортуєте, і отримуєте теку звичайних файлів. Щоденна резервна копія Supabase тепер першого типу. Файл, який ви можете тримати у себе, другого.

Чи можу я завантажити свою резервну копію Supabase?

Щоденну ні, якщо ваш проєкт працює на Postgres 15.8.1.079 або новішому. Документація Supabase про резервні копії каже, що усі проєкти на цій версії й новіших використовують фізичні резервні копії, а нотатки з усунення проблем кажуть, що з увімкненими фізичними копіями Supabase більше не створює файл резервної копії для завантаження. Відновлювати ці копії можна будь-коли. Забрати з собою жодну не можна.

Щоденна резервна копія Supabase (фізична)Дамп, який ви робите самі (логічний)
Що цеЗнімок файлів, які Postgres тримає на дискуSQL: інструкції, як відбудувати кожну таблицю, а потім рядки
Хто відновлюєSupabase, коли ви натискаєте RestoreВи, через psql, у будь-який Postgres
Куди може потрапитиУ цей проєкт або в новий у тому самому регіоніВ інший проєкт, інший обліковий запис, на ваш ноутбук, ваш сервер
Чи можна завантажитиНіЦе вже файл
Чи переживе втрату доступу до облікового записуНіТак, якщо ви зберігаєте його деінде

Останній рядок варто перечитати. Supabase пише, що під час видалення проєкту він видаляє всі повʼязані дані, зокрема резервні копії, збережені в S3. Видаліть проєкт, і його щоденні копії зникнуть тим самим кроком.

Чим фізична резервна копія відрізняється від логічної?

Тим, звідки береться копія. Фізична резервна копія копіює файли, які сам Postgres записує на диск, і Supabase описує це як знімок базового каталогу бази даних. Логічна резервна копія просить базу описати саму себе мовою SQL, таблиця за таблицею і рядок за рядком, і записує цей опис у текстовий файл.

Кожна добре робить щось своє. Фізичну копію швидко зробити і швидко повернути, і вона повертається точно такою, якою була. Прочитати її може лише такий самий тип інсталяції Postgres, з якого вона походить, а в Supabase це означає власні машини Supabase. Логічна копія довше програється і займає більше місця, зате її може завантажити будь-який Postgres тієї самої версії або новішої. Це знову резервна копія телефона й експортована тека, і лише друге є файлом, який ви можете тримати у себе.

Кнопка завантаження, яку люди памʼятають, належала логічному типу. Власна документація Supabase 2025 року казала, що щоденне завдання запускало pg_dumpall, стискало SQL-файл і зберігало його, а фізичні резервні копії менше навантажують базу й не блокують ваші таблиці надовго. На тій самій сторінці було сказано, що фізичні копії не можна завантажити з розділу Backups на панелі.

Щоденна копія може повернутися в Supabase і більше нікуди. Дамп, який ви робите самі, потрапляє будь-куди, де працює Postgres.

Як дізнатися, яка саме в мого проєкту?

Пошукайте можливість завантаження на сторінці Backups. Відкрийте Database, потім Backups, на панелі Supabase. Якщо кожну копію з датою можна якось завантажити, ваш проєкт досі на логічних резервних копіях. Якщо кожна пропонує лише Restore і більше нічого, він на фізичних, і старіша документація Supabase використовувала саме цю перевірку.

Друга перевірка це номер версії. Він показаний у Project Settings, далі General. Усе, починаючи з 15.8.1.079, означає фізичні резервні копії. Читайте зліва направо: версія, що починається з 17, новіша за будь-яку 15, а 15.8.1.100 новіша за 15.8.1.079.

Два випадки взагалі не потребують перевірки:

  • Відновлення на момент часу увімкнене. Воно за визначенням працює на фізичних резервних копіях. Supabase також пише, що, якщо ви вимкнете відновлення на момент часу, він і далі робитиме фізичні копії, тож завантаження не повернеться.
  • Ви на безкоштовному тарифі. На сторінці Backups немає нічого ні для завантаження, ні для відновлення, бо безкоштовний тариф не дає вам щоденних резервних копій, якими можна скористатися. Зробити копію без термінала це те, з чого варто почати.
Та сама сторінка у двох проєктах. Ліворуч старі логічні резервні копії, кожна із завантаженням. Праворуч фізичні: лише відновлення.

Від чого захищає кожна з них?

Щоденна резервна копія захищає вас від того, що щось зламається всередині проєкту. Файл, який лежить у вас, покриває ще й втрату самого проєкту.

Перший тип втрати ви спричиняєте самі. Видалення, яке зачепило більше рядків, ніж ви хотіли, міграція, яку написав ШІ-агент, а ви схвалили, скрипт, спрямований не на ту таблицю. Щоденна копія саме для цього: обираєте вчора, натискаєте Restore, і проєкт повертається на місце. Наскільки далеко вона сягає, залежить від вашого тарифу, а на якому тарифі ви, зʼясовується приблизно за дві хвилини.

Другий тип взагалі не повʼязаний з помилкою в базі. Картка, термін якої минув, поки вас не було, вхід, який ви не можете відновити, проєкт, який хтось видалив. Копії лежать за тими самими дверима, що й проєкт, і зачинилися саме двері. Резервна копія вашого телефона поводиться так само: вона рятує, якщо телефон упав у море, і нічим не допоможе того дня, коли ви не можете увійти в обліковий запис, де вона лежить. Supabase тримає свої резервні копії разом із платформою, бо саме це дозволяє відновлювати одним натисканням. Копія, яка переживе обліковий запис, має лежати деінде, а в Supabase це означає логічний дамп, винесений з нього.

Що означає відновлення для кожної з них?

Зі щоденною копією роботу робить Supabase, а ви обираєте, куди вона потрапить. З файлом, який лежить у вас, роботу робите ви, і він може потрапити будь-куди.

Відновлення щоденної копії в той самий проєкт замінює базу даних обраною копією. Supabase пише, що проєкт недоступний, поки це триває, і що більша база потребує більше часу.

Відновлення в новий проєкт це платна функція, яку Supabase називає Restore to a New Project, досі позначена як бета. Вона створює окремий проєкт у тому самому регіоні, з вашими користувачами та хешами їхніх паролів, і рахунок за нього виставляють як за другий проєкт. Одне попередження на тій самій сторінці легко пропустити. Вона копіює всю базу даних, зокрема розширення, що діють назовні, як-от pg_cron і pg_net, і ці завдання запускаються одразу після завершення відновлення. Якщо заплановане завдання у вашому застосунку надсилає листи або звертається до платіжного API, новий проєкт теж починає це робити з тієї миті, як зʼявився.

Відновлення файлу, який лежить у вас, означає програти його через psql у те, що ви вкажете: новий проєкт Supabase, проєкт в іншому обліковому записі або Postgres на вашому власному компʼютері. Як відновити резервну копію Supabase розбирає команди, а також те, що лишається зламаним, коли вони завершилися.

Як отримати копію моєї бази Supabase у вигляді файлу?

Зробіть логічний дамп самі. Supabase публікує його у своїй інструкції з резервного копіювання та відновлення як три команди, кожна з яких записує один файл:

supabase db dump --db-url "postgresql://…" -f roles.sql --role-only
supabase db dump --db-url "postgresql://…" -f schema.sql
supabase db dump --db-url "postgresql://…" -f data.sql --use-copy --data-only

Рядок підключення беріть з кнопки Connect угорі вашого проєкту, з паролем до бази даних замість заповнювача. Supabase CLI потрібен встановлений Docker, бо він запускає pg_dump усередині контейнера, а не бере його з вашого компʼютера.

Зберігайте всі три файли. Другий сам по собі це форма ваших таблиць без жодного рядка всередині, а ваші користувачі є лише в третьому.

Можна також запустити pg_dump напряму. Спершу дві речі. Supabase пише, що «сирий» pg_dump забирає разом із вашими схемами внутрішні схеми Supabase і що їх програвання призводить до помилок доступу на зворотному шляху. А Postgres документує, що pg_dump не робить дамп із сервера, основна версія якого новіша за його власну, тож стара копія на вашому компʼютері відмовиться запускатися, а не запише поганий файл.

Покладіть файли кудись, що не є вашим обліковим записом Supabase, і не лише на свій ноутбук.

Чи можу я відновити резервну копію Supabase на власному компʼютері?

Логічну так, у Postgres тієї самої основної версії або новішої. Фізичну щоденну копію не можна відновити ніде, крім Supabase.

Правило версій походить від самого Postgres. Його документація каже, що дамп має завантажуватися в новіші версії і що завантаження в старішу не гарантоване, навіть у ту, з якої він походить. Інструкція Supabase з перенесення проєкту з платформи на самостійно розгорнутий Supabase показує, як це виглядає. Платформа може працювати на Postgres 17, тоді як самостійно розгорнутий образ за замовчуванням працює на 15, і тоді файл даних містить рядок SET transaction_timeout = 0, якого Postgres 15 не розпізнає.

Дамп рухається вперед. Помилки починаються тоді, коли його завантажують у старіший Postgres, ніж той, з якого він походить.

Ці самі три файли також є способом піти із Supabase зовсім. Та інструкція описує, як запустити Supabase на власному сервері, і розбіжність версій це перше, про що вона попереджає.

На вашому власному компʼютері Supabase CLI піднімає локальну копію Supabase в Docker, коли ви вводите supabase start. Програйте туди три файли командою psql з інструкції Supabase з резервного копіювання та відновлення, вказавши postgresql://postgres:postgres@localhost:54322/postgres, і ваші дані можна читати на власному компʼютері без жодного облікового запису.

Є одне місце, де Supabase досі пропонує резервну копію для завантаження. Безкоштовний проєкт, призупинений довше за своє вікно відновлення, замінює кнопку Restore на завантаження останньої копії, зробленої перед паузою, а що робити з цим файлом, розповідає окрема стаття.

Чого немає в жодній із двох копій?

Ваших завантажених файлів, ваших Edge Functions і більшості налаштувань проєкту.

Supabase пише, що резервні копії бази даних не містять обʼєктів, збережених через Storage API. База тримає рядок, який описує кожен файл, а сам файл лежить деінде, тож жодна резервна копія бази на жодному тарифі не містить того, що завантажили ваші користувачі. Резервне копіювання Storage це окреме завдання.

Список, який Supabase наводить для Restore to a New Project, добре підходить як перелік решти: Edge Functions, налаштування автентифікації та ключі API, налаштування Realtime, налаштування розширень і репліки для читання доведеться налаштувати вручну заново.

Одна прогалина стосується лише файлу, який лежить у вас. Якщо ваш застосунок зберігає секрети в Supabase Vault або використовує зашифровані стовпці, Supabase пише, що файли резервних копій ніколи не містять кореневого ключа, лише зашифровані дані. Новий проєкт стартує з власним ключем, тож ці значення приходять нечитабельними, доки старий ключ не скопіюють. А старий ключ можна отримати лише доти, доки старий проєкт активний. Щойно цей проєкт призупинено або видалено, ключ більше не отримати, як і нічого з того, що ним зашифровано.

Що зробити цього тижня

Що робити

  • Відкрийте Database, потім Backups, і пошукайте можливість завантаження. Якщо кожна копія пропонує лише Restore, у вас фізичні резервні копії, і забрати звідти нічого.
  • Зробіть сьогодні логічний дамп трьома командами і зберігайте всі три файли разом.
  • Пошукайте auth.users у data.sql, перш ніж на нього покладатися. Саме в цьому файлі ваші облікові записи, якщо вони там взагалі є.
  • Зберігайте файли в місці, яке не є вашим обліковим записом Supabase.
  • Якщо ви використовуєте Supabase Vault або зашифровані стовпці, прочитайте, як переноситься кореневий ключ, ще до того, як він знадобиться. У файлі його немає.
  • Один раз програйте дамп у тестовий проєкт або локальний Supabase, щоб уперше ви відкрили його не того дня, коли він вам потрібен.

Де тут Reeve Care

Care робить логічну копію за вас, зберігає її поза Supabase, і кожна копія це файл, який можна завантажити.

  • Завантажте будь-яку копію як zip. Усередині schema.sql, data.sql і roles.sql, маніфест, що рахує рядки в кожній таблиці, і нотатка про те, як завантажити все це в будь-який Postgres. Це стандартний дамп, тож його відкриє будь-який розробник, як і будь-який інший хостинг.
  • Зберігається поза вашим обліковим записом Supabase, зашифрованою, тож лишається на місці того дня, коли облікового запису вже немає.
  • Перечитується, перш ніж зарахувати. Дата на вашій панелі це остання копія, яку відкрили й перевірили, а ніколи не остання спроба.
  • Ваші користувачі в ній є. Схема auth їде разом із вашими таблицями, а файли, які завантажили ваші користувачі, теж потрапляють туди, щойно ви підключите доступ до Storage.

Care зберігає копію вашої бази даних Supabase. Залиште щоденні резервні копії Supabase увімкненими поруч із нею: це найшвидший шлях назад після невдалої міграції, а файл це те, що лишиться, якщо ви втратите обліковий запис. Як копію роблять, перевіряють і завантажують, покроково намальовано на сторінці про резервні копії Supabase, а що входить у кожен тариф, написано на сторінці цін.

Перш ніж закрити цю вкладку, відкрийте Database, потім Backups, і подивіться поруч зі своєю найновішою копією. Якщо там нічого завантажити, наступний файл, який у вас буде, це той, що ви зробите самі, а що робить дамп повним, варто прочитати ще до того, як його робити.

Поширені запитання

Чи можу я завантажити свою резервну копію Supabase?

Щоденну ні, якщо ваш проєкт працює на Postgres 15.8.1.079 або новішому. Supabase пише, що всі проєкти на цих версіях використовують фізичні резервні копії і що після їх увімкнення він більше не створює файл резервної копії для завантаження. Відновлювати ці копії з панелі ви можете й далі. Щоб отримати файл, який можна зберегти, самі зробіть логічний дамп через Supabase CLI або pg_dump.

Чим фізична резервна копія відрізняється від логічної?

Фізична резервна копія копіює файли, які Postgres тримає на диску. Вона відновлюється швидко й точно, але лише на такому самому типі інсталяції Postgres, з якого походить, а в Supabase це означає, що відновлює її для вас Supabase. Логічна резервна копія це SQL: інструкції, як відбудувати кожну таблицю, а за ними рядки. Вона довше програється і завантажується в будь-який Postgres тієї самої версії або новішої, зокрема на вашому власному компʼютері.

Чому зникла кнопка завантаження?

Бо того, що вона завантажувала, більше не створюють. Кнопка належала старим щоденним логічним резервним копіям, SQL-файлам, які Supabase стискав і зберігав. Коли проєкт переходить на фізичні резервні копії, Supabase перестає створювати цей файл, і сторінка Backups пропонує Restore без жодного завантаження поруч. Вимкнення відновлення на момент часу її не повертає, бо Supabase і після цього робить фізичні копії.

Як отримати копію моєї бази Supabase у вигляді файлу?

Виконайте три команди, які Supabase публікує у своїй інструкції з резервного копіювання та відновлення: supabase db dump з --role-only, потім без прапорців для схеми, потім з --data-only і --use-copy для рядків. CLI потрібен Docker, бо він запускає pg_dump усередині контейнера. Зберігайте всі три файли разом, у місці, яке не є вашим обліковим записом Supabase.

Чи можу я відновити резервну копію Supabase на власному компʼютері?

Логічну так, у Postgres тієї самої основної версії або новішої. Postgres документує, що дамп завантажується вперед і що завантаження в старішу версію не гарантоване, а Supabase наводить приклад: його платформа може працювати на Postgres 17, тоді як самостійно розгорнутий Supabase за замовчуванням працює на 15. Фізичну щоденну копію не можна відновити ніде, крім Supabase.

Чи дає тариф Pro резервну копію, яку можна завантажити?

Не на проєкті з Postgres 15.8.1.079 або новішим. Там Pro дає щоденні фізичні резервні копії, які зберігаються сім днів і які можна відновити в той самий проєкт або, поки функція в беті, у новий проєкт у тому самому регіоні. Жоден із цих шляхів не дає вам файлу. Копію, яку можна завантажити, ви робите самі або платите комусь, щоб її робили.

Автор

Vlad Tkachenko

Засновник Reeve

Я щодня дивлюся на застосунки, зібрані в Lovable, Bolt, v0, Cursor і Replit, і на короткий список помилок, які трапляються в них знову і знову.

Більше про автора

Читати далі

Усі статті

Не впевнені, як справи у вашому застосунку?

Запустіть безкоштовне сканування й отримайте зрозумілу оцінку від A до F приблизно за 20 секунд. Без облікового запису й без картки.

Сканувати безкоштовно

Автоматична зовнішня перевірка, а не повний аудит. Відсутність знахідок не є гарантією безпеки.