Full DB backup: export all data to a file and restore it (swap DB on next launch)
This commit is contained in:
parent
75eca0e501
commit
682bee6e9a
6 changed files with 205 additions and 1 deletions
42
docs/session-logs/2026-09-21_db-backup.md
Normal file
42
docs/session-logs/2026-09-21_db-backup.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# Сессия 2026-09-21 (2) - экспорт/импорт всей БД (резервная копия)
|
||||
|
||||
## Контекст
|
||||
Смена сборки debug<->release стирает данные (разные подписи -> переустановка). Решили:
|
||||
НЕ делать внутриприложенческую авто-установку APK, а сделать полный бэкап/восстановление БД.
|
||||
Записано в память: `project_no_self_install`. Секретов в базе нет.
|
||||
|
||||
## Сделано
|
||||
- Rust (`lib.rs`):
|
||||
- `db_and_root(app)` - резолв пути `baldav.db` + app-root (как в rebuild_roads).
|
||||
- `export_db(filename)` - `VACUUM INTO` чистой копии в `app-root/export_db.tmp` (консистентно
|
||||
при живом соединении, сжимает ~на треть), команда `exportdb:<filename>` в gps_command.txt.
|
||||
- `import_db()` - валидирует `picked_import.db` (`PRAGMA quick_check`=='ok' + есть хоть одна
|
||||
таблица из gps_sessions/products/profile), копирует в `pending_restore.db`, удаляет picked.
|
||||
- `restart_app()` - команда `restartapp`.
|
||||
- Все три в generate_handler.
|
||||
- Kotlin (`MainActivity.kt`):
|
||||
- `pendingDbFile` + `saveDbLauncher` (CreateDocument octet-stream, СТРИМ файла, не в память -
|
||||
файл десятки МБ).
|
||||
- Ветка `exportdb:` -> SAF-сохранение `export_db.tmp`.
|
||||
- Ветка `restartapp` -> relaunch (getLaunchIntentForPackage + FLAG_ACTIVITY_NEW_TASK) +
|
||||
`Runtime.exit(0)`.
|
||||
- `onCreate` (сразу после appDataDir, ДО открытия БД): если есть `pending_restore.db` -
|
||||
скопировать на `baldav.db`, удалить journal/wal/shm и pending. Тот же паттерн, что копия сида.
|
||||
- JS (`main.js`): в Настройках блок «Резервная копия всех данных» с кнопками Экспорт/Импорт.
|
||||
Экспорт -> `export_db`. Импорт -> confirm (заменит всё) -> `pickLocalFile` -> `import_db` ->
|
||||
confirm перезапуска -> `restart_app`. Импорт только на Android.
|
||||
|
||||
## Проверка
|
||||
- JS синтаксис ок. Автономный тест `VACUUM INTO` на десктоп-БД: 53МБ -> 36МБ, quick_check ok,
|
||||
сессии на месте (валидная сжатая копия). Ядро экспорта подтверждено.
|
||||
- SAF-сохранение, своп при onCreate и рестарт - только на устройстве (Kotlin), десктоп не
|
||||
воспроизводит. Проверка на телефоне: экспорт -> файл-бэкап валиден; импорт другого бэкапа ->
|
||||
данные заменились после рестарта. (Сборка bump до 0.1.465.)
|
||||
|
||||
## Замечания
|
||||
- Сжатие gzip не делал: VACUUM INTO уже компактит; flate2 в зависимостях нет. Добавлю, если
|
||||
нужно меньше.
|
||||
- Схема-совместимость: миграции в db.js идемпотентны (ALTER ... IF NOT EXISTS), старый бэкап
|
||||
подтянется вверх, новый в старое приложение - лишние колонки безвредны.
|
||||
|
||||
## На роутере всё ещё 0.1.464 (build 464). Новый бэкап-билд (465) на роутер не выкатывал.
|
||||
Loading…
Add table
Add a link
Reference in a new issue