Bonjour à tous,
Ceci est mon premier message je m'excuse donc d'avance si j'oublie une formalité quelconque.
Mon problème est le suivant :
je possède deux tables créées de cette façon :
Code:
1
2
3
4
5
6
7 CREATE TABLE utilisateur ( id serial NOT NULL, login character varying(10) NOT NULL, mdp character varying(10) NOT NULL, CONSTRAINT utilisateur_pkey PRIMARY KEY (id) )
Tout cela fonctionne, je peux ensuite ajouter des données dans les deux tables. Seulement, si l'utilisateur avec l'id numéro 1 possède une liste et que je modifie l'id de l'utilisateur numéro 1, j'ai le droit à :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE TABLE liste ( id serial NOT NULL, idutilisateur integer, nom character varying(30) NOT NULL, element integer, elementcoche integer, modele boolean, CONSTRAINT liste_pkey PRIMARY KEY (id), CONSTRAINT liste_idutilisateur_fkey FOREIGN KEY (idutilisateur) REFERENCES utilisateur (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION )
J'ai essayer de créer un trigger pour effectuer une modification automatique :Code:
1
2
3
4
5
6
7
8
9
10
11 ERREUR: UPDATE ou DELETE sur la table « utilisateur » viole la contrainte de clé étrangère « liste_idutilisateur_fkey » de la table « liste » DETAIL: La clé (id)=(1) est toujours référencée à partir de la table « liste ». ********** Erreur ********** ERREUR: UPDATE ou DELETE sur la table « utilisateur » viole la contrainte de clé étrangère « liste_idutilisateur_fkey » de la table « liste » État SQL :23503 Détail :La clé (id)=(1) est toujours référencée à partir de la table « liste ».
mais cela ne fonctionne pas.Code:
1
2
3
4
5
6
7
8
9 CREATE FUNCTION change_idUser() RETURNS trigger AS $$ BEGIN UPDATE liste set liste.idUtilisateur = new.id; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE trigger idUserChange AFTER UPDATE ON utilisateur FOR EACH ROW EXECUTE PROCEDURE change_idUser();
Je comprends tout à fait le problème , étant une clef étrangère je ne peux pas modifier la valeur de l'id de l'utilisateur , .. mais moi je voudrais que ce soit faisable, avez-vous une solution pour moi ?
Merci d'avance :D