Re: traitement par lots et sequence
Anthony Nowocien <[email protected]> Tue, 11 Jun 2019 16:46:59 +0200
| Newsgroups | gmane.comp.db.postgresql.french |
|---|---|
| Message-ID | <CAH5RRoPrfcvmeCBDfLU3D=5=mQUTWbSoDWZVikCDEkJV6Sgeyg@mail.gmail.com> |
--0000000000007d9db0058b0d5e8b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 pour= 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 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=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 > > > --0000000000007d9db0058b0d5e8b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Bonjour Pierre,<br><br>Peux-tu utiliser la clause RETURNING de l'INSERT= ?<br><br>Exemple :<br>INSERT INTO t(a,b,c) VALUES (1,'a','aa= 9;) RETURNING a;<br><br>WITH ins_t_mere AS(INSERT INTO t(a,b,c) VALUES (1,&= #39;a','aa') RETURNING a)<br>INSERT INTO t_fille SELECT a, '= ;b', 'bb') FROM ins_t_mere;<br><br>Voir <a href=3D"https://www.= postgresql.org/docs/current/sql-insert.html">https://www.postgresql.org/doc= s/current/sql-insert.html</a><br><br>Dans la partie VALUE, tu pourras peut-= =C3=AAtre aussi utiliser DEFAULT pour ta colonne d'ID.<br><br>Anthony<b= r><br>On Tuesday, June 11, 2019, CRUMEYROLLE Pierre <<a href=3D"mailto:p= [email protected]">[email protected]</a>> wrote:<br>> = bonjour<br>><br>> probl=C3=A9me :<br>><br>> soit 2 tables : T_m= eres et T_filles li=C3=A9es par=C2=A0 T_meres.idMere<br>><br>> je veu= x faire du traitement par lots pour avoir des performances car gros volumes= <br>><br>> donc insertion par lots des T_meres sous la forme suivante= <br>><br>> insert into T_meres idMere,datamere values ((1,datam1),(2,= datam2),(3,datam3), .... (n,datamn));<br>><br>> idem insertion par lo= ts des T_filles sous la forme suivante<br>><br>> **** les n filles de= la m=C3=A9re 1 *****<br>><br>> insert into T_filles idFils,idMere,da= tamere values ((1,1,dataf1),(1,1,dataf2),(1,1,dataf3), .... (n,1,datafn));<= br>> insert into T_filles idFils,idMere,datamere values ((2,1,dataf1),(2= ,1,dataf2),(2,2,dataf3), .... (2,1,datafn));<br>> .......<br>> insert= into T_filles idFils,idMere,datamere values ((n,1,dataf1),(n,1,dataf2),(3,= 1,dataf3), .... (n,1,datafn));<br>><br>> **** les n filles de la m=C3= =A9re 2 *****<br>><br>> insert into T_filles idFils,idmere,datamere v= alues ((1,2,dataf1),(2,2,dataf2),(3,2,dataf3), .... (n,2,datafn));<br>> = insert into T_filles idFils,idmere,datamere values ((1,2,dataf1),(2,2,dataf= 2),(3,2,dataf3), .... (n,2,datafn));<br>> .......<br>> insert into T_= filles idFils,idmere,datamere values ((1,2,dataf1),(2,n,dataf2),(3,n,dataf3= ), .... (n,n,datafn));<br>><br>> etc ....<br>><br>> Ma question= :<br>> 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=C2=A0 de fa=C3=A7on la plus =C3=A9ff= icace ?<br>><br>> merci pour toute id=C3=A9e<br>><br>><br>> --0000000000007d9db0058b0d5e8b--