-- ========================================================== -- 06_validations_enrich.sql : Traçabilité complète des validations -- - Ajoute la colonne 'valide_par' (FK -> utilisateurs.id) -- - ON DELETE SET NULL pour conserver l'historique -- - Ajoute index utiles pour les requêtes (valideur, statut, date) -- A exécuter après : 01_init.sql, 02_indexes.sql, 03_checks.sql, 04_fk_policies.sql, 05_triggers.sql -- ========================================================== BEGIN; -- 1) Colonne 'valide_par' si absente ALTER TABLE validations ADD COLUMN IF NOT EXISTS valide_par UUID NULL; -- 2) FK vers utilisateurs(id), ON DELETE SET NULL DO $$ DECLARE conname text; BEGIN SELECT tc.constraint_name INTO conname FROM information_schema.table_constraints tc JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema WHERE tc.table_schema = 'public' AND tc.table_name = 'validations' AND tc.constraint_type= 'FOREIGN KEY' AND kcu.column_name = 'valide_par'; IF conname IS NOT NULL THEN EXECUTE format('ALTER TABLE public.validations DROP CONSTRAINT %I', conname); END IF; EXECUTE $sql$ ALTER TABLE public.validations ADD CONSTRAINT fk_validations_valide_par FOREIGN KEY (valide_par) REFERENCES public.utilisateurs(id) ON DELETE SET NULL $sql$; END $$; -- 3) Index pour accélérer les recherches -- - qui a validé quoi récemment ? -- - toutes les validations par statut / par date CREATE INDEX IF NOT EXISTS idx_validations_valide_par_cree_le ON validations (valide_par, cree_le); -- Certains existent peut-être déjà : on sécurise CREATE INDEX IF NOT EXISTS idx_validations_id_utilisateur_cree_le ON validations (id_utilisateur, cree_le); CREATE INDEX IF NOT EXISTS idx_validations_statut ON validations (statut); COMMIT;