pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Antonin Houska <ah@cybertec.at>
Cc: Srinath Reddy Sadipiralla <srinath2133@gmail.com>
Cc: Matthias van de Meent <boekewurm+postgres@gmail.com>
Cc: Mihail Nikalayeu <mihailnikalayeu@gmail.com>
Cc: Pg Hackers <pgsql-hackers@lists.postgresql.org>
Cc: Robert Treat <rob@xzilla.net>
Subject: Re: Adding REPACK [concurrently]
Date: Fri, 20 Mar 2026 08:59:23 +0100
Message-ID: <202603200752.zigubezzfcql@alvherre.pgsql> (raw)
In-Reply-To: <34692.1773952655@localhost>

On 2026-Mar-19, Antonin Houska wrote:

> Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
> 
> > So here's v43.  Here, I've changed the CONCURRENTLY implementation to go
> > through table AM.  This necessitated changing it to use tuples in slots
> > instead of HeapTuple.  This is good because we can avoid repeated tuple
> > form/deform, which could get pretty expensive.  Antonin's 0004 patch
> > here looks suspicious here though, because it deforms the tuple and
> > forms it again, which sounds unnecessary now.
> 
> I suppose you mean
> v42-0004-Serialize-decoded-tuples-without-flattening.patch. This deforms the
> tuple to get the external attributes and to write them to file. The tuple the
> logical worker received from reorderbuffer.c cannot be passed to the backend
> executing REPACK because it may contain "external indirect" attributes,
> i.e. pointers to the worker's memory.

No, that patch has been absorbed in what is now v43-0003.  I meant
v43-0004 "Use BulkInsertState when copying data to the new heap.",
that's why I said "patch 0004 here".  In this patch, we have
reform_tuple which deforms the tuple, sets to NULL any attribute that's
marked dropped, and then forms a new one.  This is wasteful and should
probably be done elsewhere, while the tuple is still in slot
representation.  In fact, I suspect it may not be necessary at all
anymore.

I haven't verified whether all the code is covered by existing tests;
what I did was just run them.  But to ensure that it is all trustworthy,
I'll spend some time with the coverage report to ensure there aren't any
nasty surprises anywhere.  The slot/tupdesc interface is notoriously bad
at differentiating 0-based indexes of the attribute array, and 1-based
proper attribute numbers, so it's very easy to do the wrong thing.
(It's worse when you do an even number of wrong things and they cancel
each other out.)

-- 
Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/
"This is what I like so much about PostgreSQL.  Most of the surprises
are of the "oh wow!  That's cool" Not the "oh shit!" kind.  :)"
Scott Marlowe, http://archives.postgresql.org/pgsql-admin/2008-10/msg00152.php





view thread (415+ messages)  latest in thread

Message-ID: <202603200752.zigubezzfcql@alvherre.pgsql>
Permalink:  ../202603200752.zigubezzfcql@alvherre.pgsql/
Also on:    postgresql.org/message-id/202603200752.zigubezzfcql@alvherre.pgsql

 · 

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-hackers@postgresql.org
  Cc: alvherre@alvh.no-ip.org, ah@cybertec.at, srinath2133@gmail.com, boekewurm+postgres@gmail.com, mihailnikalayeu@gmail.com, pgsql-hackers@lists.postgresql.org, rob@xzilla.net
  Subject: Re: Adding REPACK [concurrently]
  In-Reply-To: <202603200752.zigubezzfcql@alvherre.pgsql>

* 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