-- +goose Up -- +goose StatementBegin -- Backup-History: jede Backup-Operation (manual oder scheduled) wird -- nach Abschluss hier eingetragen — Operator sieht die Liste in der -- /backup-UI mit Größe, Dauer, Status. Files liegen auf der lokalen -- Box unter /var/backups/edgeguard/; nicht zwischen Cluster- -- Nodes synchronisiert (Backup ist node-local — jeder Node sichert -- seinen eigenen State). CREATE TABLE IF NOT EXISTS backups ( id BIGSERIAL PRIMARY KEY, file TEXT NOT NULL, -- Basename, z.B. eg-20260512-153045.tar.gz size_bytes BIGINT NOT NULL, sha256 TEXT NOT NULL, db_dump_bytes BIGINT NOT NULL DEFAULT 0, files_bytes BIGINT NOT NULL DEFAULT 0, kind TEXT NOT NULL, -- manual | scheduled status TEXT NOT NULL, -- success | failed error TEXT, -- gesetzt bei failed host TEXT, -- hostname der Box (für Cluster-Sicht später) started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), finished_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT backups_file_unique UNIQUE (file), CONSTRAINT backups_kind_check CHECK (kind IN ('manual', 'scheduled')), CONSTRAINT backups_status_check CHECK (status IN ('success', 'failed')) ); CREATE INDEX IF NOT EXISTS idx_backups_started ON backups (started_at DESC); CREATE INDEX IF NOT EXISTS idx_backups_status ON backups (status); -- +goose StatementEnd -- +goose Down -- +goose StatementBegin DROP TABLE IF EXISTS backups; -- +goose StatementEnd