From 2a302f511a9b013aef290b1a641ec6ccc4075080 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 4 Dec 2024 12:06:24 +0100 Subject: [PATCH v45.3 4/5] Support for GiST in get_equal_strategy_number() A WITHOUT OVERLAPS primary key or unique constraint is accepted as a REPLICA IDENTITY, since it guarantees uniqueness. But subscribers applying logical decoding messages would fail because there was not support for looking up the equals operator for a gist index. This fixes that: For GiST indexes we can use the stratnum GiST support function. Discussion: https://www.postgresql.org/message-id/flat/CA+renyUApHgSZF9-nd-a0+OPGharLQLO=mDHcY4_qQ0+noCUVg@mail.gmail.com --- src/backend/executor/execReplication.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index 2b42c0ae524..fddbfaba7ab 100644 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -15,6 +15,7 @@ #include "postgres.h" #include "access/genam.h" +#include "access/gist.h" #include "access/relscan.h" #include "access/tableam.h" #include "access/transam.h" @@ -40,11 +41,6 @@ static bool tuples_equal(TupleTableSlot *slot1, TupleTableSlot *slot2, /* * Returns the fixed strategy number, if any, of the equality operator for the * given operator class, otherwise, InvalidStrategy. - * - * Currently, only Btree and Hash indexes are supported. The other index access - * methods don't have a fixed strategy for equality operation - instead, the - * support routines of each operator class interpret the strategy numbers - * according to the operator class's definition. */ StrategyNumber get_equal_strategy_number(Oid opclass) @@ -60,8 +56,10 @@ get_equal_strategy_number(Oid opclass) case HASH_AM_OID: ret = HTEqualStrategyNumber; break; + case GIST_AM_OID: + ret = GistTranslateStratnum(opclass, RTEqualStrategyNumber); + break; default: - /* XXX: Only Btree and Hash indexes are supported */ ret = InvalidStrategy; break; } -- 2.42.0