-- 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.';