Fix REPACK with WITHOUT OVERLAPS replica identity indexes - Mailing list pgsql-hackers

From Chao Li
Subject Fix REPACK with WITHOUT OVERLAPS replica identity indexes
Date
Msg-id 7B0EC0EC-5461-41EF-9B31-F9BBE608DEA5@gmail.com
Whole thread
List pgsql-hackers
Hi,

While testing UPDATE FOR PORTION OF, I started wondering whether REPACK supports temporal tables. In theory, it should,
becausetemporal WITHOUT OVERLAPS indexes can be used as replica identity indexes. So I created a test script,
repack_temporal.spec,which is included in the attached patch, and it failed. 

I found that REPACK hard-codes BTEqualStrategyNumber when calling get_opfamily_member(). That seems wrong, because
build_replindex_scan_key()uses IndexAmTranslateCompareType() to get the equality strategy for COMPARE_EQ. 

After fixing the hard-coded BTEqualStrategyNumber, the temporal test passed. Then I added another test for multirange,
repack_temporal_multirange.spec,which also failed. The reason is that find_target_tuple() uses the identity index to
findthe first tuple and returns it directly, but a lossy index scan may return false positives and require recheck. 

Please see the attached patch for the fix details and test scripts.

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


Attachment

pgsql-hackers by date:

Previous
From: Fujii Masao
Date:
Subject: Re: Call EndCopyFrom() after initial table sync in logical replication
Next
From: John Naylor
Date:
Subject: errposition