IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Trigger qui provoque des doublons [9.2]


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut Trigger qui provoque des doublons
    Bonjour,

    je tente de creer un trigger qui copie les insert de la tbl1 dans la tbl2 et execute un update :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    create or replace function myprocedure() returns trigger as
    begin 
    IF (TG_OP = 'INSERT')THEN 
     insert into tbl2
     select new.* from tbl1 ;
     
    update tbl2
    set (field1, field2) =  ... ;
     
     return new ;
     END IF ;
    END;
    $$ LANGUAGE plpgsql ;
     
    DROP TRIGGER IF EXISTS mytrig ON public.tbl1 ;
        CREATE TRIGGER mytrig AFTER INSERT or UPDATE on public.tbl1
    FOR EACH ROW EXECUTE PROCEDURE myprocedure();
    apres un premer insert sur la tbl1, j'obtiens dans la tbl2 :
    parfait
    apres un deuxieme insert sur la tbl1, j'obtiens dans la tbl2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1 bla blo
    2 plop plip
    2 plop plip

    apres un troisieme insert sur la tbl1, j'obtiens dans la tbl2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1 bla blo
    2 plop plip
    2 plop plip
    3 grrr ??
    3 grrr ??
    3 grrr ??


    impossible de trouver la cause
    des idées ? Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Ben oui, si vous ne filtrez pas sur les pseudo table OLD ou NEW vous allez réinjecter toutes les données initiales !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    merci pour cette réponse un peu enigmatique pour moi toutefois.
    je vais tâcher d'en saisir la pleine signification et de revenir avec la solution !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    On m'a conseillé par ailleurs d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into tbl2
    values (field1, field2)...
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into tbl2
     select new.* from tbl1
    et cela fonctionne et donne donc dans la tbl2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1 bla blo
    2 plop plip
    3 grrr ??
    pas compris pourquoi encore une fois...

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par Leehan Voir le message
    pas compris pourquoi encore une fois...
    from tbl1 : renvoie toutes les lignes de tbl1 (absence de filtre)
    Mais new.* correspond aux valeurs en cours d'insertion dans tbl1.

    Donc select new.* from tbl1 renvoie la valeur encours d'insertion autant de fois qu'il y a de ligne dans tbl1.

    Il faut effectivement utiliser insert into values dans le trigger pour insérer dans tbl2 les données de la ligne en cours d'insertion dans tbl1.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    merci c est plus clair.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. NuméroAuto qui crée des doublons!
    Par Chrysostome dans le forum VBA Access
    Réponses: 21
    Dernier message: 03/05/2016, 16h02
  2. Une requête qui donne des doublons dans les résultats
    Par HDR_16 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/04/2014, 18h51
  3. saveOrUpdate() qui crée des doublons lors de l'update
    Par tamiii dans le forum Hibernate
    Réponses: 1
    Dernier message: 21/04/2009, 15h44
  4. requete qui retourne des doublons
    Par sallemel dans le forum Hibernate
    Réponses: 0
    Dernier message: 12/12/2008, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo