Files
Starlight_Lancher/packages/app-lib/backup_migrations/20260920131000_initial.sql
T

77 lines
2.2 KiB
SQL

CREATE TABLE repository_meta (
id INTEGER PRIMARY KEY CHECK (id = 0),
schema_name TEXT NOT NULL,
created_at INTEGER NOT NULL
);
INSERT INTO repository_meta (id, schema_name, created_at)
VALUES (0, 'axolotl-instance-backups', unixepoch('subsec') * 1000);
CREATE TABLE instance_backup_configs (
instance_id TEXT PRIMARY KEY,
instance_name TEXT NOT NULL,
created_at INTEGER NOT NULL,
modified_at INTEGER NOT NULL
);
CREATE TABLE backup_selections (
instance_id TEXT NOT NULL REFERENCES instance_backup_configs(instance_id) ON DELETE CASCADE,
path TEXT NOT NULL,
PRIMARY KEY (instance_id, path)
);
CREATE TABLE backup_snapshots (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL REFERENCES instance_backup_configs(instance_id) ON DELETE CASCADE,
instance_name TEXT NOT NULL,
created_at INTEGER NOT NULL,
file_count INTEGER NOT NULL,
symlink_count INTEGER NOT NULL,
logical_size INTEGER NOT NULL,
added_size INTEGER NOT NULL
);
CREATE INDEX backup_snapshots_instance_created
ON backup_snapshots(instance_id, created_at DESC);
CREATE TABLE snapshot_roots (
snapshot_id TEXT NOT NULL REFERENCES backup_snapshots(id) ON DELETE CASCADE,
path TEXT NOT NULL,
existed INTEGER NOT NULL,
PRIMARY KEY (snapshot_id, path)
);
CREATE TABLE backup_objects (
hash TEXT PRIMARY KEY,
size INTEGER NOT NULL,
ref_count INTEGER NOT NULL CHECK (ref_count >= 0)
);
CREATE TABLE snapshot_entries (
snapshot_id TEXT NOT NULL REFERENCES backup_snapshots(id) ON DELETE CASCADE,
path TEXT NOT NULL,
kind TEXT NOT NULL CHECK (kind IN ('file', 'directory', 'symlink')),
object_hash TEXT REFERENCES backup_objects(hash),
size INTEGER NOT NULL DEFAULT 0,
modified_at INTEGER,
unix_mode INTEGER,
link_target TEXT,
link_is_directory INTEGER,
PRIMARY KEY (snapshot_id, path),
CHECK ((kind = 'file' AND object_hash IS NOT NULL) OR (kind != 'file' AND object_hash IS NULL)),
CHECK ((kind = 'symlink' AND link_target IS NOT NULL) OR (kind != 'symlink' AND link_target IS NULL))
);
CREATE INDEX snapshot_entries_object_hash
ON snapshot_entries(object_hash) WHERE object_hash IS NOT NULL;
CREATE TABLE object_gc_queue (
hash TEXT PRIMARY KEY,
queued_at INTEGER NOT NULL
);
CREATE TABLE pending_instance_deletions (
instance_id TEXT PRIMARY KEY,
marked_at INTEGER NOT NULL
);