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