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
>

Reply via email to