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 <tgl@xxxxxxxxxxxxx> wrote:
=?UTF-8?Q?Torsten_F=C3=B6rtsch?= <tfoertsch123@xxxxxxxxx> writes: Yup, sure looks like a bug to me, especially since it seems to work as
> 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"
expected before 9.5. No idea offhand what broke it.
regards, tom lane