From: | Thomas Boussekey <thomas(dot)boussekey(at)gmail(dot)com> |
---|---|
To: | CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr> |
Cc: | pgsql-fr-generale(at)lists(dot)postgresql(dot)org |
Subject: | Re: traitement par lots et sequence |
Date: | 2019-06-11 20:42:28 |
Message-ID: | CALUeYmc3K1JLLnmdiuU7Dmgm1JrapeUhTg=_kit3zOZV-E+8Bw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour Pierre,
Pour la gestion des insertions dans la table fille, je passerai par:
* une table temporaire qui accueillerait les nouveaux enregistrements à
ajouter à la table fille (sans la valeur de séquence)
* 2 solutions possibles:
* un trigger positionné sur cette table temporaire avec l'option FOR
EACH STATEMENT (en espérant qu'il voit bien la commande INSERT globale
comme un seul statement) pour remplir la table fille en fonction des
données de la table mère et de la table temporaire.
* un INSERT ... SELECT en joignant les tables temporaire et mère pour
générer l'enregistrement fils dans le bon format.
* Ne pas oublier de bien gérer la purge de la table temporaire
Sinon, est-ce qu'il est nécessaire d'avoir une séquence?
Ou il est possible de déplacer la PK sur le champ Id_mere pour la table
mère, auquel cas le problème de récupération de la valeur du champ
disparaît.
Thomas
Le mar. 11 juin 2019 à 19:51, CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr>
a écrit :
> ok
>
> mais dans le
> WITH ins_t_mere AS(INSERT INTO t(a,b,c) VALUES (1,'a','aa') RETURNING a)
> > INSERT INTO t_fille SELECT a, 'b', 'bb') FROM ins_t_mere;
> ne fait pas un traitement par lot
>
> merci
>
>
> Anthony Nowocien <anowocien(at)gmail(dot)com> a écrit :
>
> > Bonjour Pierre,
> >
> > Peux-tu utiliser la clause RETURNING de l'INSERT?
> >
> > Exemple :
> > INSERT INTO t(a,b,c) VALUES (1,'a','aa') RETURNING a;
> >
> > WITH ins_t_mere AS(INSERT INTO t(a,b,c) VALUES (1,'a','aa') RETURNING a)
> > INSERT INTO t_fille SELECT a, 'b', 'bb') FROM ins_t_mere;
> >
> > Voir /docs/current/sql-insert.html
> >
> > Dans la partie VALUE, tu pourras peut-être aussi utiliser DEFAULT pour ta
> > colonne d'ID.
> >
> > Anthony
> >
> > On Tuesday, June 11, 2019, CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr
> >
> > wrote:
> >> bonjour
> >>
> >> probléme :
> >>
> >> soit 2 tables : T_meres et T_filles liées par T_meres.idMere
> >>
> >> je veux faire du traitement par lots pour avoir des performances car
> gros
> > volumes
> >>
> >> donc insertion par lots des T_meres sous la forme suivante
> >>
> >> insert into T_meres idMere,datamere values
> > ((1,datam1),(2,datam2),(3,datam3), .... (n,datamn));
> >>
> >> idem insertion par lots des T_filles sous la forme suivante
> >>
> >> **** les n filles de la mére 1 *****
> >>
> >> insert into T_filles idFils,idMere,datamere values
> > ((1,1,dataf1),(1,1,dataf2),(1,1,dataf3), .... (n,1,datafn));
> >> insert into T_filles idFils,idMere,datamere values
> > ((2,1,dataf1),(2,1,dataf2),(2,2,dataf3), .... (2,1,datafn));
> >> .......
> >> insert into T_filles idFils,idMere,datamere values
> > ((n,1,dataf1),(n,1,dataf2),(3,1,dataf3), .... (n,1,datafn));
> >>
> >> **** les n filles de la mére 2 *****
> >>
> >> insert into T_filles idFils,idmere,datamere values
> > ((1,2,dataf1),(2,2,dataf2),(3,2,dataf3), .... (n,2,datafn));
> >> insert into T_filles idFils,idmere,datamere values
> > ((1,2,dataf1),(2,2,dataf2),(3,2,dataf3), .... (n,2,datafn));
> >> .......
> >> insert into T_filles idFils,idmere,datamere values
> > ((1,2,dataf1),(2,n,dataf2),(3,n,dataf3), .... (n,n,datafn));
> >>
> >> etc ....
> >>
> >> Ma question :
> >> Comment recuperer ou provisionner la plage de sequence balayé dans
> > l'insert des méres pour l'utiliser dans l'insert des filles dans un
> > traitement par lots de façon la plus éfficace ?
> >>
> >> merci pour toute idée
> >>
> >>
> >>
>
>
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | CRUMEYROLLE Pierre | 2019-06-11 21:04:14 | Re: traitement par lots et sequence |
Previous Message | CRUMEYROLLE Pierre | 2019-06-11 17:50:48 | Re: traitement par lots et sequence |