Re: tablecmds: fix bug where index rebuild loses replica identity on partitions - Mailing list pgsql-hackers

From Chao Li
Subject Re: tablecmds: fix bug where index rebuild loses replica identity on partitions
Date
Msg-id 260E4616-43B7-4C24-BF53-352DC8DEB7AA@gmail.com
Whole thread Raw
In response to Re: tablecmds: fix bug where index rebuild loses replica identity on partitions  (Chao Li <li.evan.chao@gmail.com>)
List pgsql-hackers

> On Feb 26, 2026, at 14:59, Chao Li <li.evan.chao@gmail.com> wrote:
>
>
>
>> On Jan 28, 2026, at 10:49, Chao Li <li.evan.chao@gmail.com> wrote:
>>
>>
>>
>>> On Jan 27, 2026, at 16:30, Chao Li <li.evan.chao@gmail.com> wrote:
>>>
>>>
>>>
>>>> On Jan 27, 2026, at 15:59, Chao Li <li.evan.chao@gmail.com> wrote:
>>>>
>>>>
>>>>
>>>>> On Jan 27, 2026, at 15:39, Michael Paquier <michael@paquier.xyz> wrote:
>>>>>
>>>>> On Tue, Jan 27, 2026 at 01:13:32PM +0800, Chao Li wrote:
>>>>>> I found this bug while working on a related patch [1].
>>>>>>
>>>>>> When ALTER TABLE ... ALTER COLUMN TYPE causes an index rebuild, and
>>>>>> that index is used as REPLICA IDENTITY on a partitioned table, the
>>>>>> replica identity marking on partitions can be silently lost after the
>>>>>> rebuild.
>>>>>
>>>>> I am slightly confused by the tests included in the proposed patch.
>>>>> On HEAD, if I undo the proposed changes of tablecmds.c, the tests
>>>>> pass.  If I run the tests of the patch with the changes of
>>>>> tablecmds.c, the tests also pass.
>>>>
>>>> Oops, that isn’t supposed to be so. I’ll check the test.
>>>>
>>>
>>> Okay, I see the problem is here:
>>> ```
>>> +CREATE UNIQUE INDEX test_replica_identity_partitioned_pkey ON test_replica_identity_partitioned (id);
>>> ```
>>>
>>> I missed to add column “val” into the index, so that alter type of val didn’t cause index rebuild.
>>>
>>> Ideally, it’s better to also verify that index OIDs should have changed before and after alter column type, but I
haven’tfigured out how to do so. Do you have an idea? 
>>
>> I just updated the test to store index OIDs before and after rebuild into 2 temp tables, so that we can compare the
OIDsto verify rebuild happens and replica identity preserved. 
>>
>> I tried to port the test to master branch, and the test failed. From the test diff file, we can see replica identity
loston 3 leaf partitions: 
>> ```
>> @@ -360,9 +360,9 @@
>>  ORDER BY b.index_name;
>>                    index_name                     | rebuilt | ri_lost
>> ---------------------------------------------------+---------+---------
>> - test_replica_identity_partitioned_p1_id_val_idx   | t       | f
>> - test_replica_identity_partitioned_p2_1_id_val_idx | t       | f
>> - test_replica_identity_partitioned_p2_2_id_val_idx | t       | f
>> + test_replica_identity_partitioned_p1_id_val_idx   | t       | t
>> + test_replica_identity_partitioned_p2_1_id_val_idx | t       | t
>> + test_replica_identity_partitioned_p2_2_id_val_idx | t       | t
>> test_replica_identity_partitioned_p2_id_val_idx   | t       | f
>> test_replica_identity_partitioned_pkey            | t       | f
>> (5 rows)
>> ```
>>
>> With this patch, the test passes and all replica identity are preserved.
>>
>> PFA v3:
>> * Enhanced the test.
>> * A small change in find_partition_replica_identity_indexes(): if we will not update a partition, then unlock it.
>>
>> Best regards,
>> --
>> Chao Li (Evan)
>> HighGo Software Co., Ltd.
>> https://www.highgo.com/
>>
>>
>>
>>
>> <v3-0001-tablecmds-fix-bug-where-index-rebuild-loses-repli.patch>
>
> The CF asked for a rebase, thus rebased as v4.
>
> Best regards,
> --
> Chao Li (Evan)
> HighGo Software Co., Ltd.
> https://www.highgo.com/
>
>
>
>
> <v4-0001-tablecmds-fix-bug-where-index-rebuild-loses-repli.patch>

Rebased, and a gentle ping.

Since this is a bug fix and the issue is easy to reproduce, I’m hoping it can still make it into v19.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/





Attachment

pgsql-hackers by date:

Previous
From: David Rowley
Date:
Subject: Re: Reduce planning time for large NOT IN lists containing NULL
Next
From: "Hayato Kuroda (Fujitsu)"
Date:
Subject: RE: Patch for migration of the pg_commit_ts directory