Thanks. I wouldn't have thought to look back that far since the query worked on v15. Interesting.
The failure to emit an error when it probably should have is likely a bug in older versions since fixed.
Fair enough.
That the behavior depends on the chosen plan and plans differ when you do and do not materialize a CTE is likewise not surprising.
I guess I wouldn't expect Postgres to generate a plan that it then can't execute. That's what's surprising to me.
But it's fine. In all my years of using Postgres this is the first time I've run into a query that no longer executes, so I wanted to bring it to y'alls attention.