BUG #16978: Nested CTEs give ERROR in v13 - Mailing list pgsql-bugs

From PG Bug reporting form
Subject BUG #16978: Nested CTEs give ERROR in v13
Date
Msg-id 16978-813ac0832f35db82@postgresql.org
Whole thread Raw
Responses Re: BUG #16978: Nested CTEs give ERROR in v13  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      16978
Logged by:          Robins Tharakan
Email address:      tharakan@gmail.com
PostgreSQL version: 13.2
Operating system:   Ubuntu
Description:

This narrowed down SQL (from what SQLSmith generated) seems to error out
only with N levels of CTE nesting - no tables / views / 1-row output. 

The SQL works fine with v12.4 but raises an ERROR in v13 which seems like a
regression. Is this owing a recent change in v13 - that could affect this?

(This was found during a larger investigation around a v13 SegFault but this
does seem worthy of its own bug-report).

→ psql -h localhost
psql (14devel, server 13.2)
Type "help" for help.

postgres=# --Having w_err in the SQL gives an error about UNION ALL
postgres=# WITH RECURSIVE w6(c6) AS
postgres-#     (WITH w6(c6) AS
postgres(#       (WITH w8(c8) AS
postgres(#       (WITH w9(c9) AS
postgres(#       (WITH w10(c10) AS
postgres(#       (WITH w11(c11) AS
postgres(#       (WITH w_err(c12) AS
postgres(#    (SELECT 1)
postgres(#     SELECT * FROM w_err)
postgres(#     SELECT * FROM w11)
postgres(#     SELECT * FROM w10)
postgres(#     SELECT * FROM w9)
postgres(#     SELECT * FROM w8)
postgres(#      SELECT * FROM w6)
postgres-#     SELECT * FROM w6;
ERROR:  recursive query "w6" does not have the form non-recursive-term UNION
[ALL] recursive-term
LINE 1: WITH RECURSIVE w6(c6) AS
                       ^
postgres=#
postgres=#
postgres=#
postgres=# -- Removing w_err it works
postgres=# WITH RECURSIVE w6(c6) AS
postgres-#     (WITH w6(c6) AS
postgres(#       (WITH w8(c8) AS
postgres(#       (WITH w9(c9) AS
postgres(#       (WITH w10(c10) AS
postgres(#       (WITH w11(c11) AS
postgres(# --      (WITH w_err(c12) AS
postgres(#    (SELECT 1)
postgres(# --    SELECT * FROM w_err)
postgres(#     SELECT * FROM w11)
postgres(#     SELECT * FROM w10)
postgres(#     SELECT * FROM w9)
postgres(#     SELECT * FROM w8)
postgres(#      SELECT * FROM w6)
postgres-#     SELECT * FROM w6;
 c6
----
  1
(1 row)

postgres=> \q

→ r.sh 12
psql (14devel, server 12.4)
Type "help" for help.

postgres=> -- No error on v12 with or without w_err
postgres=>
postgres=> WITH RECURSIVE w6(c6) AS
postgres->     (WITH w6(c6) AS
postgres(>       (WITH w8(c8) AS
postgres(>       (WITH w9(c9) AS
postgres(>       (WITH w10(c10) AS
postgres(>       (WITH w11(c11) AS
postgres(>       (WITH w_err(c12) AS
postgres(>    (SELECT 1)
postgres(>     SELECT * FROM w_err)
postgres(>     SELECT * FROM w11)
postgres(>     SELECT * FROM w10)
postgres(>     SELECT * FROM w9)
postgres(>     SELECT * FROM w8)
postgres(>      SELECT * FROM w6)
postgres->     SELECT * FROM w6;
 c6
----
  1
(1 row)

postgres=> -- No error on v12 with or without w_err
postgres=>
postgres=> WITH RECURSIVE w6(c6) AS
postgres->     (WITH w6(c6) AS
postgres(>       (WITH w8(c8) AS
postgres(>       (WITH w9(c9) AS
postgres(>       (WITH w10(c10) AS
postgres(>       (WITH w11(c11) AS
postgres(> --      (WITH w_err(c12) AS
postgres(>    (SELECT 1)
postgres(> --    SELECT * FROM w_err)
postgres(>     SELECT * FROM w11)
postgres(>     SELECT * FROM w10)
postgres(>     SELECT * FROM w9)
postgres(>     SELECT * FROM w8)
postgres(>      SELECT * FROM w6)
postgres->     SELECT * FROM w6;
 c6
----
  1
(1 row)


pgsql-bugs by date:

Previous
From: Thomas Munro
Date:
Subject: Re: BUG #16976: server crash when deleting via a trigger on a foreign table
Next
From: Amit Langote
Date:
Subject: Re: posgres 12 bug (partitioned table)