postgres.git / summary / log / commit / refs

commit    3beb945da9d72a9803180deb1752cf8feeb66883
Author:   Amit Kapila <akapila@postgresql.org>
Date:     Wed Sep 11 03:48:23 2024 +0000
First released in: 18.0

    Improve assertion in FindReplTupleInLocalRel().
    
    The first part of the assertion verifying that the passed index must be PK
    or RI was incorrectly passing index relation instead of heap relation in
    GetRelationIdentityOrPK(). The assertion was not failing because the
    second part of the assertion which needs to be performed only when remote
    relation has REPLICA_IDENTITY_FULL set was also incorrect.
    
    The change is not backpatched because the current coding doesn't lead to
    any failure.
    
    Reported-by: Dilip Kumar
    Author: Amit Kapila
    Reviewed-by: Vignesh C
    Discussion: https://postgr.es/m/CAFiTN-tmguaT1DXbCC+ZomZg-oZLmU6BPhr0po7akQSG6vNJrg@mail.gmail.com


src/backend/replication/logical/worker.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 0fb577d3281..925dff9cc44 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -2929,9 +2929,10 @@ FindReplTupleInLocalRel(ApplyExecutionData *edata, Relation localrel, Relation idxrel = index_open(localidxoid, AccessShareLock); /* Index must be PK, RI, or usable for REPLICA IDENTITY FULL tables */ - Assert(GetRelationIdentityOrPK(idxrel) == localidxoid || - IsIndexUsableForReplicaIdentityFull(BuildIndexInfo(idxrel), - edata->targetRel->attrmap)); + Assert(GetRelationIdentityOrPK(localrel) == localidxoid || + (remoterel->replident == REPLICA_IDENTITY_FULL && + IsIndexUsableForReplicaIdentityFull(BuildIndexInfo(idxrel), + edata->targetRel->attrmap))); index_close(idxrel, AccessShareLock); #endif [parent: 65c310b310a6]