Przejdź do głównej zawartości

Migracje

src-tauri/src/database/migrations.rs
const SCHEMA_VERSION: i64 = 20250201; // YYYYMMDD format
pub async fn run_migrations(pool: &SqlitePool) -> Result<()> {
let current_version: i64 = sqlx::query_scalar("PRAGMA user_version;")
.fetch_one(pool).await?;
if current_version >= SCHEMA_VERSION {
return Ok(()); // Already up to date
}
// UWAGA: System usuwa WSZYSTKIE tabele i tworzy od nowa!
drop_existing_objects(conn).await?;
for statement in SCHEMA_STATEMENTS {
sqlx::query(statement.sql).execute(&mut *tx).await?;
}
sqlx::query(&format!("PRAGMA user_version = {SCHEMA_VERSION};"))
.execute(&mut *tx).await?;
}
AspektStan
Development✅ Działa - czysta baza przy każdej zmianie
Fresh install✅ Działa - tworzy schemat od zera
Upgrade z danymiTRACI WSZYSTKIE DANE
Migracja produkcyjnaNie obsługiwana

Okno terminala
# Główny plik schematu
src-tauri/src/database/schema.rs
// Dodaj nową kolumnę lub tabelę do SCHEMA_STATEMENTS
pub const SCHEMA_STATEMENTS: &[SchemaStatement] = &[
SchemaStatement {
sql: r#"
CREATE TABLE users (
user_id TEXT PRIMARY KEY,
name TEXT NOT NULL,
// ... nowe pola tutaj
)
"#,
},
// ... pozostałe tabele
];
src-tauri/src/database/migrations.rs
const SCHEMA_VERSION: i64 = 20251204; // Nowa data
src-tauri/src/database/models.rs
#[derive(Debug, Clone, Serialize, Deserialize, sqlx::FromRow)]
pub struct User {
pub user_id: String,
pub name: String,
pub new_field: Option<String>, // Nowe pole
}
Okno terminala
# Reset bazy (development)
pnpm db:reset
# Uruchom aplikację
pnpm tauri:dev

Okno terminala
# macOS
~/Library/Application Support/Vista/vista.db
~/Library/Application Support/Vista/vista.db-wal
~/Library/Application Support/Vista/vista.db-shm
# Windows
%APPDATA%/Vista/vista.db
# Linux
~/.local/share/Vista/vista.db
Okno terminala
# Bezpieczny backup (nawet gdy aplikacja działa)
sqlite3 "$HOME/Library/Application Support/Vista/vista.db" \
".backup '$HOME/Vista-Backups/vista_$(date +%Y%m%d_%H%M%S).db'"
Okno terminala
# 1. Zatrzymaj aplikację Vista
# 2. Backup uszkodzonej bazy
mv ~/Library/Application\ Support/Vista/vista.db ~/vista_corrupted_backup.db
# 3. Przywróć z backupu
cp ~/Vista-Backups/vista_20251127_120000.db \
~/Library/Application\ Support/Vista/vista.db
# 4. Uruchom Vista - migracje wykonają się automatycznie
# 5. Zweryfikuj integralność
sqlite3 ~/Library/Application\ Support/Vista/vista.db "PRAGMA integrity_check;"
Okno terminala
# SQLite recovery mode
sqlite3 corrupted.db ".recover" | sqlite3 recovered.db
# Lub sqlite3_recover
sqlite3_recover corrupted.db recovered.db

Typ danychRetencjaKonfiguracja
Audio recordings7-365 dniuser.audio_retention_days
Visit draftsBez limituRęczne usuwanie
Audit logs3 lataWymagane prawnie
Session tokens24h - 30 dnitoken_type dependent
Password reset tokens1 godzinaAuto-expire

  1. Incremental migrations - prawdziwy system migracji z wersjonowaniem
  2. Data preservation - ALTER TABLE zamiast DROP/CREATE
  3. Rollback support - możliwość cofnięcia migracji
  4. Migration testing - automatyczne testy migracji
// Przyszła architektura (planowana)
pub enum Migration {
V20251201_AddUserPreferences,
V20251202_AddAudioRetention,
V20251203_AddTasksPanel,
}
impl Migration {
pub fn up(&self, conn: &Connection) -> Result<()> {
match self {
Self::V20251201_AddUserPreferences => {
// ALTER TABLE users ADD COLUMN ...
}
// ...
}
}
pub fn down(&self, conn: &Connection) -> Result<()> {
// Rollback logic
}
}