Thanks for confirming.

Here are a few more examples that also work:

with i(x) as (values (1::int)) select x from (select x from i union all
select 3::int) b order by x desc limit 1;

with i(x) as (values (1::int)) select max(x) from (select x from i union
select 3::int) b;

It also works with EXCEPT or INTERSECT, both with or without ALL.

The UNION ALL version fails with MIN and MAX but it works with all other
aggregates that I have tested.


On Tue, Dec 13, 2016 at 4:31 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:

> =?UTF-8?Q?Torsten_F=C3=B6rtsch?= <tfoertsch...@gmail.com> writes:
> > postgres=# with i(x) as (values (1::int)), j(y) as (values (2::int))
> select
> > x from (select x from i union all select y from j) b;
> > x
> > ---
> > 1
> > 2
> > (2 rows)
>
> > postgres=# with i(x) as (values (1::int)), j(y) as (values (2::int))
> select
> > max(x) from (select x from i union all select y from j) b;
> > ERROR:  could not find plan for CTE "i"
>
> Yup, sure looks like a bug to me, especially since it seems to work as
> expected before 9.5.  No idea offhand what broke it.
>
>                         regards, tom lane
>

Reply via email to