syncova-backup/migrations/000001_baseline.up.sql
Jerrit Fritzsche 610719c316
Some checks failed
CI / Backend (Go) (push) Failing after 3m7s
CI / Frontend (React/TypeScript) (push) Successful in 37s
CI / Sicherheitsprüfungen (push) Successful in 44s
Syncova Backups V1
Enterprise-Backup-, Recovery-, Verification-, Security- und
Monitoring-Plattform fuer Proxmox VE, Windows, Linux und Dateisysteme.

Der Leitsatz, der fast jede Entscheidung erklaert: Ein Backup gilt erst als
vertrauenswuerdig, wenn Integritaet geprueft und Wiederherstellbarkeit
nachgewiesen wurde. Deshalb steigt ein Wiederherstellungspunkt erst nach einem
tatsaechlich durchgefuehrten Restore-Test auf "recoverable", und Unbekanntes
geht in keine Bewertung als "gut" ein.

Umfang (Phasen 0-23):

- Repository Engine: inhaltsadressierte Bloecke, atomares Commit-Protokoll,
  Katalogaufbau allein aus den Manifesten — ohne Datenbank
- Backup Engine: inhaltsabhaengiges Chunking, Deduplizierung trotz
  Verschluesselung, zstd, AES-256-GCM, Streaming mit Gegendruck
- Agenten fuer Windows und Linux mit Auftragsabholung (Pull-Modell)
- Proxmox-Provider mit beiden Zugriffswegen auf die Sicherungsarchive
- Scheduler, Recovery Engine mit Pruefpunkt, Verification, Unveraenderlichkeit
- Weboberflaeche, Kennzahlen, Meldungen, Berichte, Security Center,
  Ransomware-Heuristik (meldet, handelt nie)
- Disaster Recovery, Haertung, Leistungsmessung, Chaos Testing
- Eingefrorene Vertraege fuer API, Migrationen, Backup-Format und Repository
- Auslieferungspaket fuer linux/amd64, linux/arm64 und windows/amd64

Nicht enthalten und als solches gekennzeichnet: Kapazitaetsprognose, Backup
Copy, Changed Block Tracking bei Proxmox, erweiterte Attribute und ACLs.

Gebaut, aber nie auf echter Hardware gefahren: der Windows-Dienst, die
systemd-Einheit und der verpflichtende Proxmox-Meilenstein — ob eine
wiederhergestellte VM startet, ist ungeprueft. Einzelheiten in CHANGELOG.md
und docs/release-candidate.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 09:10:54 +02:00

45 lines
2.1 KiB
SQL

-- Baseline-Migration der Syncova-Control-Plane-Datenbank.
--
-- Sie legt ausschließlich die Grundlagen, auf denen alle weiteren Migrationen
-- aufbauen. Fachliche Tabellen (Benutzer, Jobs, Repositories) folgen in den
-- Phasen 1 ff. des Implementierungsplans.
--
-- Regeln laut SYNCOVA_DATABASE.md §1:
-- - Öffentliche Bezeichner sind UUIDs.
-- - Alle Zeitstempel sind TIMESTAMPTZ in UTC.
-- - Backup-Nutzdaten werden niemals in PostgreSQL gespeichert.
-- pgcrypto liefert gen_random_uuid() für die Vergabe öffentlicher Bezeichner.
CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- system_settings hält die Laufzeitkonfiguration der Control Plane.
--
-- Secrets gehören ausdrücklich nicht hierher: sie werden ausschließlich als
-- Referenz auf einen Secret Store abgelegt (PROMPT.md §12).
CREATE TABLE system_settings (
-- key ist der eindeutige Name der Einstellung, z. B. "retention.default_days".
key TEXT PRIMARY KEY,
-- value_json ist der Wert der Einstellung als JSON-Dokument.
value_json JSONB NOT NULL,
-- updated_at ist der Zeitpunkt der letzten Änderung in UTC.
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
-- updated_by (Referenz auf users) ergänzt Phase 1 gemeinsam mit der Benutzertabelle.
);
COMMENT ON TABLE system_settings IS 'Laufzeitkonfiguration der Control Plane. Enthält niemals Secrets im Klartext.';
-- schema_baseline dokumentiert, mit welcher Programmversion ein Schema angelegt wurde.
--
-- Bei einem Disaster Recovery lässt sich damit feststellen, ob Datenbank und
-- Binary zusammenpassen (SYNCOVA_IMPLEMENTATION_PLAN.md Phase 18, Szenario B).
CREATE TABLE schema_baseline (
-- id ist der Primärschlüssel des Eintrags.
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- application_version ist die Programmversion, die diese Migration ausgeführt hat.
application_version TEXT NOT NULL,
-- applied_at ist der Zeitpunkt der Ausführung in UTC.
applied_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
COMMENT ON TABLE schema_baseline IS 'Dokumentiert, mit welcher Programmversion das Schema initialisiert wurde.';