Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 22/02/2010 16:04:11
- sophonie
- Membre
Trigger permettant l'ajout automatique d'un record
Bonjour à toutes et à tous,
J'ai crée un trigger permettant d'ajouter automatiquement une ligne dans la table authentification
lors de l'ajout d'un nouvel utilisateur.
Cependant, j'ai un message d'erreur lors de l'execution de la requête INSERT INTO users VALUES ...
Néanmoins voici le script PL/pgSQL permettant un ajout dans la table authentification.
CREATE OR REPLACE FUNCTION ajout_auth() RETURNS trigger AS $ajout_auth$
BEGIN
RAISE NOTICE 'ajout du client en cours ...';
IF (TG_OP = 'INSERT') THEN
INSERT INTO authentification (auth_id, auth_login, auth_passwd, auth_dtecreation, auth_dtelastconnect, auth_actif) VALUES
((SELECT COALESCE (MAX(auth_id),0) + 1 FROM authentification),lower(NEW.user_nom), initcap(NEW.user_prenom), CURRENT_DATE, CURRENT_DATE, true);
RETURN NEW;
END IF;
END;
$ajout_auth$ LANGUAGE plpgsql;
CREATE TRIGGER ajout_auth AFTER INSERT ON users
FOR EACH ROW
EXECUTE PROCEDURE ajout_auth();
Sous psql en exécutant la requête suivante :
INSERT INTO users VALUES ((SELECT COALESCE (MAX(user_id),0) + 1 FROM users), 'DURAND','renaud','1969-04-11','renaud.durand@businessdecision.com','h','9,rue de Condé','','Bordeaux','33000', 1,11,'0556001260');
J'ai le message d'erreur suivant :
ERREUR: une instruction insert ou update sur la table « users » viole la contrainte de clé
étrangère « fk_users_idauth »
DÉTAIL : La clé (user_idauth)=(11) n'est pas présente dans la table « authentification ».
La valeur 11 (champ idauth dans la table user) correspond à l'id que devrait avoir le nouvel utilisateur
ajouté.
Si je ne mets pas 11, qu'elle valeur dois-je mettre?
Merci d'avance.
Sophonie.
Hors ligne
#2 22/02/2010 22:49:40
- Marc Cousin
- Membre
Re : Trigger permettant l'ajout automatique d'un record
J'ai l'impression que la foreign key est déclarée à l'envers : je présume que l'idée c'est de vérifier que les authentifications se rapportent bien à des users bien définis ? Si c'est le cas, la foreign key devrait être déclarée sur authentification, pas sur user.
Marc.
Hors ligne
#3 23/02/2010 15:28:04
- sophonie
- Membre
Re : Trigger permettant l'ajout automatique d'un record
Bonjour Marc Cousin,
Effectivement la phase de conception via la méthode MERISE n'a pas été correctement mis en oeuvre
pour cette relation.
Pour que mon trigger soit opérationnel, il faut que je lui indique de ce déclencher
avant(BEFORE) l'insertion dans la table users au lieu de après(AFTER).
Ce qui donne :
CREATE TRIGGER ajout_auth BEFORE INSERT ON users
Etant donné que des tuples sont déjà présents, je continuerai avec cette "coquille".
Merci encore.
Sophonie.
Dernière modification par sophonie (23/02/2010 15:29:29)
Hors ligne
#4 23/02/2010 18:31:49
- sophonie
- Membre
Re : Trigger permettant l'ajout automatique d'un record
Etant donné que des tuples sont déjà présents, je continuerai avec cette "coquille"
Je ne continuerai pas avec cette coquille, car les problèmes se représenteront par la suite
ultérieurement.
J'ai donc redéfini mon modèle conceptuel des données afin qu'il y ai davantage de cohérence.
Bonne soirée.
Sophonie.
Hors ligne