Thread: BUG #18608: Assert in check_agglevels_and_constraints() fails on creating a rule with aggr(NEW) in subselect

The following bug has been logged on the website:

Bug reference:      18608
Logged by:          Alexander Lakhin
Email address:      exclusion@gmail.com
PostgreSQL version: 17rc1
Operating system:   Ubuntu 22.04
Description:

The following script:
CREATE TABLE t (a int);
CREATE VIEW v AS SELECT 1;

CREATE RULE v_ins AS ON INSERT TO v
      DO INSTEAD INSERT INTO t
      SELECT * FROM (SELECT count(NEW) FROM t);

triggers an assertion failure:
TRAP: failed Assert("pstate->p_lateral_active"), File: "parse_agg.c", Line:
385, PID: 2785906

Without asserts enabled, it fails with:
ERROR:  aggregate functions are not allowed in FROM clause of their own
query level

Reproduced on REL_9_3_STABLE .. master.


PG Bug reporting form <noreply@postgresql.org> writes:
> [ NEW reference confuses check_agglevels_and_constraints ]

> triggers an assertion failure:
> TRAP: failed Assert("pstate->p_lateral_active"), File: "parse_agg.c", Line:
> 385, PID: 2785906

> Without asserts enabled, it fails with:
> ERROR:  aggregate functions are not allowed in FROM clause of their own
> query level

Interesting.  I'm inclined to just remove the Assert, since it's
evidently wrong and the ensuing error seems sufficiently on-point.

            regards, tom lane