From 74edabce7a33f428371f0da6c0338837fd9ac55e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 10 Dec 2024 13:26:09 +0100 Subject: [PATCH] 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. Reviewed-by: Paul Jungwirth Reviewed-by: vignesh C 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 4431f6b9ecf..68deea50f66 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.30.2