[PATCH] Use direct hash lookup in logicalrep_partmap_invalidate_cb()
DaeMyung Kang <charsyam@gmail.com>
From: DaeMyung Kang <charsyam@gmail.com>
To: pgsql-hackers@lists.postgresql.org
Cc: DaeMyung Kang <charsyam@gmail.com>
Date: 2026-04-17T17:44:50Z
Lists: pgsql-hackers
Attachments
- 0001-Use-direct-hash-lookup-in-logicalrep_partmap_invalid.patch (text/x-patch) patch 0001
LogicalRepPartMap is keyed by the partition's OID, which is assigned to entry->relmapentry.localreloid when the entry is populated in logicalrep_partition_open(). The invalidation callback therefore does not need to iterate over every entry to find the one matching the invalidated relation OID; a single hash_search(HASH_FIND) on reloid suffices. This replaces an O(N) hash_seq_search loop with an O(1) lookup and removes the longstanding "TODO, use inverse lookup hashtable?" comment. An Assert in logicalrep_partition_open() documents the partOid == entry->relmapentry.localreloid invariant that the new path relies on. --- Tested on an --enable-cassert build: the full src/test/subscription TAP suite (39 files, 579 tests) passes, including 013_partition.pl which exercises the partmap invalidation path via ADD COLUMN on a partitioned root (cascades a relcache inval to every leaf partition). src/backend/replication/logical/relation.c | 23 +++++++++------------- 1 file changed, 9 insertions(+), 14 deletions(-)