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 >>> >>> >>>