Re: traitement par lots et sequence

Marc Cousin <[email protected]> Wed, 12 Jun 2019 13:58:09 +0200
Newsgroups gmane.comp.db.postgresql.french
Message-ID <[email protected]>
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--bydaGHPkw6NGq6NgDjRb4Kcabm1PhwauK
Content-Type: multipart/mixed; boundary="6H8vA6cy3ovClrTNGunnqaqAzTMsQOJ5i";
 protected-headers="v1"
From: Marc Cousin <[email protected]>
To: [email protected]
Message-ID: <[email protected]>
Subject: Re: traitement par lots et sequence
References: <[email protected]>
 <CAH5RRoPrfcvmeCBDfLU3D=5=mQUTWbSoDWZVikCDEkJV6Sgeyg@mail.gmail.com>
 <[email protected]>
 <[email protected]>
 <[email protected]>
 <[email protected]>
In-Reply-To: <[email protected]>

--6H8vA6cy3ovClrTNGunnqaqAzTMsQOJ5i
Content-Type: text/plain; charset=utf-8
Content-Language: en-US-large
Content-Transfer-Encoding: quoted-printable

Un truc de ce genre devrait pouvoir le faire...

create table t_mere (id serial primary key, payload int);
create table t_fille (id serial, id_mere int references t_mere(id), paylo=
ad int);


with insert_tmere as (insert into t_mere (payload) values (1),(2) returni=
ng *),
number_tmere as (select row_number() over () as num,* from insert_tmere)
insert into t_fille (id_mere, payload)
select number_tmere.id,v.payload from (values (1,3),(1,5),(2,2),(2,6)) as=
 v(pos_mere,payload)
join number_tmere on (pos_mere=3Dnum);


=C3=80 vous de g=C3=A9n=C3=A9rer les listes de values... Si vous r=C3=A9c=
up=C3=A9rez des json ou xml ou des choses comme =C3=A7a, vous pouvez m=C3=
=AAme certainement
passer le json dans un premier CTE, l'=C3=A9clater =C3=A0 coup de json_ea=
ch ou =C3=A9quivalent, plut=C3=B4t que de devoir fabriquer
les listes de values vous m=C3=AAme.


On 12/06/2019 11:36, CRUMEYROLLE Pierre wrote:
>=20
> structure en arbre
> recuperation par position dans la liste
> je suis preneur d'id=C3=A9e je dois pas =C3=AAtre le seul a faire du tr=
aitement par lots sur des tables li=C3=A9es par des FK
> merci A+
>=20
> Marc Cousin <[email protected]> a =C3=A9crit=C2=A0:
>=20
>> On 11/06/2019 23:04, CRUMEYROLLE Pierre wrote:
>>> 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','b=
b'),(3,'c','cc') RETURNING listedata)
>>> 1 a aa=C2=A0 -- 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 lis=
tedata.a dans un etable t_fille
>>
>> La difficult=C3=A9 est de savoir comment vous allez raccrocher vos enr=
egistrements =C3=A0 leur parent avec cette m=C3=A9thode
>>
>> J'imagine qu'initialement, vous aviez une structure hi=C3=A9rarchique =
? Dans quel format ?
>>
>>
>> Dans l'algorithme de d=C3=A9part, vous positionnez vous-m=C3=AAme les =
id de la m=C3=A8re. Mais si les ids sont autog=C3=A9n=C3=A9r=C3=A9s, comm=
ent les r=C3=A9cup=C3=A9reriez vous pour les insertions dans les tables f=
illes ? par leur position dans la liste ?
>=20
>=20
>=20
>=20


--6H8vA6cy3ovClrTNGunnqaqAzTMsQOJ5i--

--bydaGHPkw6NGq6NgDjRb4Kcabm1PhwauK
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEErRJFoqQ1WmHC5to09vfGVovAkJ8FAl0A6NEACgkQ9vfGVovA
kJ/QXgf/RpLWneoo4WeCx/Y/UEm3WdyXwHqj1maDU8E0Ou+wEnbc+dxQgsT3jjEx
3HtFxwj2F5FXpu+QJxRM2NbNdS7Dh3RPWJOkk5JPKwYQBH6FJy/2IKYyovvs8XKY
KwDJIBAl7Ub8Szhii6IHxIYlz3rXU/ksH+weqhz06MhdLU9WjrwaTDekVLZ3F9nG
4JjjNYQeCv+mq1Ujh2ZjveuXvfeLYhXT4BbZY/ynsoxI1e6SOGp7q/RuE6Frg1Ii
PIqiHQ9LQkNuJH17xuWeQQp8zg0pSYNpRuFDHS3tcaBbe+ekCgd41p+xFoiGZXay
gE9ekIMAuy+0dF0TxbLktYRQH98X2Q==
=Odvo
-----END PGP SIGNATURE-----

--bydaGHPkw6NGq6NgDjRb4Kcabm1PhwauK--