public inbox for [email protected]  
help / color / mirror / Atom feed
From: Erik Nordström <[email protected]>
To: [email protected]
Subject: Changed behavior in rewriteheap
Date: Thu, 21 Nov 2024 17:08:49 +0100
Message-ID: <CACAa4VJ+QY4pY7M0ECq29uGkrOygikYtao1UG9yCDFosxaps9g@mail.gmail.com> (raw)

Hello,

I've noticed a change in behavior of the heap rewrite functionality in
PostgreSQL 17, used by, e.g., CLUSTER. I've been experimenting with the
functionality to implement a way to merge partitions in TimescaleDB. I am
using table_relation_copy_for_cluster() to write the data of several tables
to a single merged table, and then I do a heap swap on one of the original
tables while dropping the others. So, if you have 3 partitions and want to
merge them to one, then I write all three partitions to a temporary heap,
swap the new heap on partition 1 and then drop partitions 2 and 3.

Now, this approach worked fine for PostgreSQL 15 and 16, but 17 introduced
some changes that altered the behavior so that I only see data from one of
the partitions after merge (the last one written).

The commit that I think is responsible is the following:
https://github.com/postgres/postgres/commit/8af256524893987a3e534c6578dd60edfb782a77

Now, I realize that this is not a problem for PostgreSQL itself since the
rewrite functionality isn't used for the purpose I am using it. To my
defense, the rewrite code seems to imply that it should be possible to
write more data to an existing heap according to this comment in
begin_heap_rewrite: /* new_heap needn't be empty, just locked */.

I've also tried recompiling PG17 with the rewriteheap.c file from PG16 and
then it works again. I haven't yet been able to figure out exactly what is
different but I will continue to try to narrow it down. In the meantime,
maybe someone on the mailing list has some insight on what could be the
issue and whether my approach is viable?

Regards,
Erik

-- 
Database Architect, Timescale


view thread (2+ messages)

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: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: Changed behavior in rewriteheap
  In-Reply-To: <CACAa4VJ+QY4pY7M0ECq29uGkrOygikYtao1UG9yCDFosxaps9g@mail.gmail.com>

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

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