Re: traitement par lots et sequence

CRUMEYROLLE Pierre <[email protected]> Tue, 11 Jun 2019 23:04:14 +0200
Newsgroups gmane.comp.db.postgresql.french
Message-ID <[email protected]>
ok si je fais un traitement par lot ( 3 lignes par exemple)

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

j'ai un peu de mal a comprendre comment j=E2=80=99ins=C3=A8re les listedata=
.a dans=20=20
un=20etable t_fille


CRUMEYROLLE Pierre <[email protected]> a =C3=A9crit=C2=A0:

> 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 <[email protected]> a =C3=A9crit=C2=A0:
>
>> 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-=C3=AAtre aussi utiliser DEFAULT p=
our ta
>> colonne d'ID.
>>
>> Anthony
>>
>> On Tuesday, June 11, 2019, CRUMEYROLLE Pierre <[email protected]=
>
>> wrote:
>>> bonjour
>>>
>>> probl=C3=A9me :
>>>
>>> soit 2 tables : T_meres et T_filles li=C3=A9es par  T_meres.idMere
>>>
>>> je veux faire du traitement par lots pour avoir des performances car gr=
os
>> 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=C3=A9re 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=C3=A9re 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=C3=A9 dans
>> l'insert des m=C3=A9res pour l'utiliser dans l'insert des filles dans un
>> traitement par lots  de fa=C3=A7on la plus =C3=A9fficace ?
>>>
>>> merci pour toute id=C3=A9e
>>>
>>>
>>>