public inbox for [email protected]  
help / color / mirror / Atom feed
From: Alexander Korotkov <[email protected]>
To: Dmitry Koval <[email protected]>
Cc: [email protected]
Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands
Date: Fri, 31 Oct 2025 01:48:50 +0200
Message-ID: <CAPpHfduQwwa4ytK-dGjRGN0fTWfpWNNysYuUKrOetsyGioBMfA@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>
References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org>
	<[email protected]>
	<CACJufxGWCVf5r9kE-z6MyR2b+wkaU15Q5m2tKz4cvBhYX3-x1g@mail.gmail.com>
	<[email protected]>
	<CAPpHfdshkf0C2h09S00TVB8h3x8UT+GZyQ6LK2WGg1hOjnNE4g@mail.gmail.com>
	<CAPpHfdsh_jPZ6-2JtWoFeZravVQYY4cYCcnKXQW6KxEx+F5vxg@mail.gmail.com>
	<[email protected]>
	<CACJufxF1Hfx1PST7pCLrKkGcjHEn2A51znXmYwVccnt5GDORcw@mail.gmail.com>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<CACJufxET9Qe-=zJtjGrKPr7-1QbVcP9y-vJU9CMEDfPGt_dbyg@mail.gmail.com>
	<[email protected]>
	<CACJufxEBvrtcOWyX2NMwOCvb2ZvaRGaGeiMQpUD=yxL6ncBFOg@mail.gmail.com>
	<[email protected]>
	<CAPpHfdvSBR+sbsRCAybN949tOGArQvMH2QeDXf2L=7NDMNbJfw@mail.gmail.com>
	<[email protected]>

On Tue, Oct 28, 2025 at 1:12 AM Dmitry Koval <[email protected]> wrote:
> 1.
>  > The second CommandCounterIncrement() is needed to make the renamed
>  > relation visible within our transaction.  Why do we need the first
>  >one?  I see tests pass without it.
>
> It's strange. If I comment the first "CommandCounterIncrement();", in block
> -----------------------------------------------------------------------
> /*
>   * We must bump the command counter to make the split partition tuple
>   * visible for renaming.
>   */
> CommandCounterIncrement();
> /* Rename partition. */
> sprintf(tmpRelName, "split-%u-%X-tmp", RelationGetRelid(rel), ...);
> RenameRelationInternal(splitRelOid, tmpRelName, true, false);
> /*
>   * We must bump the command counter to make the split partition tuple
>   * visible after renaming.
>   */
> CommandCounterIncrement();
> -----------------------------------------------------------------------
> , I got the error "ERROR: tuple already updated by self" in the
> partition_split.sql test (Ubuntu). If I comment the second
> "CommandCounterIncrement();", I got the error "ERROR:  relation
> "sales_others" already exists" in the same test.

Sorry, actually it fails.  It appears that the first
CommandCounterIncrement() is needed to see the result of
detachPartitionTable().

> 2.
>  >The branch handling null value in the outer loop, uses null2 flag from
>  >the inner loop.  I think for the null value of the outer loop we still
>  >need to run inner loop to search for the matching null value.
>
> This code looks a little confusing, but it probably works correctly.
> This can be verified using two typical examples:
> -----------------------------------------------------------------------
> list1: (NULL, 1)
> list2: (2, NULL)
>
> (1) isnull1 = true, (2) "if (isnull1) lappend(NULL)"
> -----------------------------------------------------------------------
> list1: (1, NULL)
> list2: (NULL, 2)
>
> (1) isnull2 = true, (2) "if (isnull2) lappend(NULL)"
> -----------------------------------------------------------------------
> In both cases, we return from the function immediately after lappend.
> This works because we need to find exactly one repeating value.

How this function could handle this case?

list1: (NULL)
list2: whatever containing NULL

The outer loop will just quit after iterating the only element of
list1 without even iterating list2.

------
Regards,
Alexander Korotkov
Supabase





view thread (165+ messages)  latest in thread

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], [email protected]
  Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands
  In-Reply-To: <CAPpHfduQwwa4ytK-dGjRGN0fTWfpWNNysYuUKrOetsyGioBMfA@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