Re: traitement par lots et sequence

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 https://www.postgresql.org/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
> >>
> >>
> >>
>
>
>
>
>

In response to

Responses

Browse pgsql-fr-generale by date

  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