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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)
)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
)
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ».
J'ai essayer de créer un trigger pour effectuer une modification automatique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
mais cela ne fonctionne pas.

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