Hola Jaime Muchas gracias por su respuesta y tiempo.. Pues como sumerce bien lo expresa, esta documentado pero no deja de ser confuso y para un usuario desprevenido (que no detalle la documentación ) podria inducirlo a interpretaciones erroneas
El 3 sept. 2017 7:42 PM, "Jaime Casanova" <jaime.casan...@2ndquadrant.com> escribió: > On 10 August 2017 at 14:33, Hellmuth Vargas <hiv...@gmail.com> wrote: > > > > Hola Lista > > > > Estaba revisando porque unas sentencias se ejecutaban y otras no con > WITH y > > prepare este script para que ustedes me ayuden a entender: > > > > Acabo de ver tu correo y me parecía un comportamiento extraño pero > conocido. La documentación señala lo que muestras en este párrafo de > https://www.postgresql.org/docs/9.6/static/sql-select.html#SQL-WITH > """ > The primary query and the WITH queries are all (notionally) executed > at the same time. This implies that the effects of a data-modifying > statement in WITH cannot be seen from other parts of the query, other > than by reading its RETURNING output. If two such data-modifying > statements attempt to modify the same row, the results are > unspecified. > """ > > En otras palabras que durante la ejecución de la consulta, no verás > los cambios reflejados en las tablas finales sino sólo en las tablas > temporales (que se forman por la inclusión de la clausula returning) > que forman parte del WITH (en tu caso, la consulta principal debería > hacer referencia a base y a hijos) > > por lo que, al menos en el primer ejercicio que mostraste, la consulta > debería ser así: > """ > with base as(insert into padre(id,texto) select a.dato,chr(dato) from > generate_series(33,255,1) as a(dato) returning id,texto), > hijos as (insert into hijo(id, texto, padre_id) select -a.id,'el > char de ' || a.id || 'es: ' || texto,a.id from base as a returning *) > select * from base as a join hijos as b on a.id=b.padre_id; > """ > > PD: por favor, cuando copies una consulta evita pegar el prompt > (test=# en tu caso). sólo probe con la primera consulta porque no > tenía intenciones de limpiar las otras consultas para poderlas > ejecutar. > > -- > Jaime Casanova www.2ndQuadrant.com > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services >