54 lines
1.8 KiB
PL/PgSQL
54 lines
1.8 KiB
PL/PgSQL
-- ==========================================================
|
|
-- 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;
|