Re: traitement par lots et sequence

From: CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr>
To: pgsql-fr-generale(at)lists(dot)postgresql(dot)org
Subject: Re: traitement par lots et sequence
Date: 2019-06-11 21:04:14
Message-ID: 20190611230414.Horde.UAt0GTkAmh9EiZ4HK3zxFA1@messagerie.c-s.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

ok si je fais un traitement par lot ( 3 lignes par exemple)

WITH ins_t_mere AS(INSERT INTO t(a,b,c) VALUES
(1,'a','aa'),(2,'b','bb'),(3,'c','cc') RETURNING listedata)
1 a aa -- valeurs retournées
2 b bb
3 c cc
...

j'ai un peu de mal a comprendre comment j’insère les listedata.a dans
un etable t_fille

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:46:21 Re: traitement par lots et sequence
Previous Message Thomas Boussekey 2019-06-11 20:42:28 Re: traitement par lots et sequence