-- 158_dedup_doc_check_controls.sql -- Behebt die historische Triplikation von compliance.doc_check_controls -- (Dump-Artefakt: kein PK/Unique -> identische Zeilen mehrfach; prod 3x). -- Idempotent + verhindert Wiederkehr. macmini ist bereits dedupt (no-op), -- prod wird 1713->571 / 1143->381 / 225->75 dedupt. -- [migration-approved] -- 1) Dedup: pro (doc_type, control_id) nur die Zeile mit kleinster ctid behalten. DELETE FROM compliance.doc_check_controls a USING compliance.doc_check_controls b WHERE a.ctid > b.ctid AND a.doc_type IS NOT DISTINCT FROM b.doc_type AND a.control_id IS NOT DISTINCT FROM b.control_id; -- 2) Wiederkehr verhindern: Unique-Constraint auf (doc_type, control_id). DO $do$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'uq_doc_check_controls_doctype_control' ) THEN ALTER TABLE compliance.doc_check_controls ADD CONSTRAINT uq_doc_check_controls_doctype_control UNIQUE (doc_type, control_id); END IF; END $do$;