pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Make left-join removal safe under -DREALLOCATE_BITMAPSETS.
Date: Thu, 09 May 2024 15:02:05 +0000
Message-ID: <E1s55HY-000Aat-9B@gemulon.postgresql.org> (raw)

Make left-join removal safe under -DREALLOCATE_BITMAPSETS.

The initial building of RestrictInfos and SpecialJoinInfos tends to
create structures that share relid sets (such as syn_lefthand and
outer_relids).  There's nothing wrong with that in itself, but when
we modify those relid sets during join removal, we have to be sure
not to corrupt the values that other structures are pointing at.
remove_rel_from_query() was careless about this.  It accidentally
worked anyway because (1) we'd never be reducing the sets to empty,
so they wouldn't get pfree'd; and (2) the in-place modification is the
same one that we did or will apply to the other struct's relid set,
so that there wasn't visible corruption at the end of the process.

While there's no live bug in a standard build, of course this is way
too fragile to accept going forward.  (Maybe we should back-patch
this change too for safety, but I've refrained for now.)

This bug was exposed by the recent invention of REALLOCATE_BITMAPSETS.
Commit e0477837c had installed a fix, but that went away with the
reversion of SJE, so now we need to fix it again.

David Rowley and Tom Lane

Discussion: https://postgr.es/m/CACJufxFVQmr4=JWHAOSLuKA5Zy9H26nY6tVrRFBOekHoALyCkQ@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/c7be3c015bfe518d0624029e640252248a3c8615

Modified Files
--------------
src/backend/optimizer/plan/analyzejoins.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)



Message-ID: <E1s55HY-000Aat-9B@gemulon.postgresql.org>
Permalink:  ../E1s55HY-000Aat-9B@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1s55HY-000Aat-9B@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Make left-join removal safe under -DREALLOCATE_BITMAPSETS.
  In-Reply-To: <E1s55HY-000Aat-9B@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox