> > * Aggregates allowed: > > > > with recursive foo(i) as > > (values(1) > > union all > > select max(i)+1 from foo where i < 10) > > select * from foo; > > > > Aggregates should be blocked according to the standard. > > Also, causes an infinite loop. This should be fixed for 8.4. > > I will try to fix this.
We already reject: select max(i) from foo where i < 10) But max(i)+1 seems to slip the check. I looked into this I found the patch tried to detect the case before analyzing(see parser/parse_cte.c) which is not a right thing I think. I think we could detect the case by adding more checking in parseCheckAggregates(): /* * Check if there's aggregate function in a recursive term. */ foreach(l, qry->rtable) { RangeTblEntry *rte = (RangeTblEntry *) lfirst(l); if (qry->hasAggs && rte->rtekind == RTE_RECURSIVE && rte->self_reference) { ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("aggregate functions in a recursive term not allowed"))); } } What do you think? -- Tatsuo Ishii SRA OSS, Inc. Japan -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers