* Bonjour, *
Je voudrais mettre une colonne d'une table en lecture seule ( = interdit d'en modifier la valeur) .
On m'a parlé d'utiliser une règle sur Update .
Comment faire cette règle ?
* Merci *
Version imprimable
* Bonjour, *
Je voudrais mettre une colonne d'une table en lecture seule ( = interdit d'en modifier la valeur) .
On m'a parlé d'utiliser une règle sur Update .
Comment faire cette règle ?
* Merci *
Il faut plutôt faire un trigger sur update qui lève une exception si l'expression old.colonne IS DISTINCT FROM new.colonne est vraie.
Utilisez une vue et faite une transformation "nulle" sur cette colonne.
Exemple :
A +Code:
1
2
3
4 CREATE VIEW V AS SELECT C1, C2, C3 + 0 AS C3 FROM MaTable
Merci beaucoup , j'ai donc créé une procédure et un trigger
rq : dans la procédure , le code "is distinct from" est à préférer à l'operateur <> car il gère les null.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 CREATE FUNCTION public.bloque() RETURNS "trigger" AS $BODY$ DECLARE BEGIN IF new.monchamp is distinct from old.monchamp THEN RAISE EXCEPTION 'Champ monchamp en lecture seule'; END IF; RETURN NEW; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; CREATE TRIGGER bloque BEFORE UPDATE ON public.matable FOR EACH ROW EXECUTE PROCEDURE bloque() ;