Re: pgsql: Remove over-optimistic Assert.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Richard Guo <guofenglinux(at)gmail(dot)com>
Cc: pgsql-committers(at)lists(dot)postgresql(dot)org, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: pgsql: Remove over-optimistic Assert.
Date: 2023-02-02 02:04:01
Message-ID: 1446620.1675303441@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Richard Guo <guofenglinux(at)gmail(dot)com> writes:
> On Thu, Feb 2, 2023 at 8:40 AM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>> In commit 2489d76c4, I'd thought it'd be safe to assert that a
>> PlaceHolderVar appearing in a scan-level expression has empty
>> nullingrels. However this is not so, as when we determine that a
>> join relation is certainly empty we'll put its targetlist into a
>> Result-with-constant-false-qual node, and nothing is done to adjust
>> the nullingrels of the Vars or PHVs therein. (Arguably, a Result
>> used in this way isn't really a scan-level node, but it certainly
>> isn't an upper node either ...)

> It seems this is the only case we can have PlaceHolderVar with non-empty
> nullingrels at scan level. So I wonder if we can manually adjust the
> nullingrels of PHVs in this special case, and keep the assertion about
> phnullingrels being NULL in fix_scan_expr. I think that assertion is
> asserting the right thing in most cases. It's a pity to lose it.

Well, if we change the nullingrels of the PHV in the Result, then we
will likely have to loosen the nullingrels cross-check in the next
plan level up. That doesn't seem like much of an improvement.
Keeping the Result's tlist the same as what we would have generated for
a non-dummy join node seems right to me.

We could perhaps use a weaker assert like "phv->phnullingrels == NULL ||
we-are-at-a-dummy-Result", but I didn't think it was worth passing down
the extra flag needed to make that happen. (Also, it's fair to wonder
whether setrefs.c actually knows whether a Result arose this way.)

Also, there are other places in setrefs.c that are punting on checking
phnullingrels. If we don't tighten all of them, I doubt we've moved
the ball very far.

regards, tom lane

In response to

Browse pgsql-committers by date

  From Date Subject
Next Message Amit Kapila 2023-02-02 02:55:18 pgsql: Allow the logical_replication_mode to be used on the subscriber.
Previous Message Richard Guo 2023-02-02 02:01:49 Fwd: pgsql: Remove over-optimistic Assert.

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2023-02-02 02:06:19 Re: Weird failure with latches in curculio on v15
Previous Message Richard Guo 2023-02-02 02:01:49 Fwd: pgsql: Remove over-optimistic Assert.