Re: Assert failure of the cross-check for nullingrels
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Richard Guo <guofenglinux@gmail.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2023-05-18T16:32:59Z
Lists: pgsql-hackers
Attachments
- v4-0001-fix-clause_is_computable_at.patch (text/x-diff) patch v4-0001
Richard Guo <guofenglinux@gmail.com> writes: > On Thu, May 18, 2023 at 3:34 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> After some poking at it I hit on what seems like a really simple >> solution: we should be checking syn_righthand not min_righthand >> to see whether a Var should be considered nullable by a given OJ. > I thought about this solution before but proved it was not right in > https://www.postgresql.org/message-id/CAMbWs48fObJJ%3DYVb4ip8tnwxwixUNKUThfnA1eGfPzJxJRRgZQ%40mail.gmail.com > I checked the query shown there and it still fails with v3 patch. Bleah. The other solution I'd been poking at involved adding an extra check for clone clauses, as attached (note this requires 8a2523ff3). This survives your example, but I wonder if it might reject all the clones in some cases. It seems a bit expensive too, although as I said before, I don't think the clone cases get traversed all that often. Perhaps another answer could be to compare against syn_righthand for clone clauses and min_righthand for non-clones? That seems mighty unprincipled though. regards, tom lane
Commits
-
In clause_is_computable_at(), test required_relids for clone clauses.
- b9c755a2f625 16.0 landed
-
Tweak API of new function clause_is_computable_at().
- 8a2523ff3540 16.0 landed