BUG #16268: SPI_getvalue requires IsTransactionState but TextDatumGetCString of SPI_getbinval - not! - Mailing list pgsql-bugs

From PG Bug reporting form
Subject BUG #16268: SPI_getvalue requires IsTransactionState but TextDatumGetCString of SPI_getbinval - not!
Date
Msg-id 16268-3d91474b3e57a5bf@postgresql.org
Whole thread Raw
Responses Re: BUG #16268: SPI_getvalue requires IsTransactionState butTextDatumGetCString of SPI_getbinval - not!  (Michael Paquier <michael@paquier.xyz>)
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      16268
Logged by:          RekGRpth
Email address:      rekgrpth@gmail.com
PostgreSQL version: 12.2
Operating system:   Docker alpine edge
Description:

const char *data = SPI_getvalue(SPI_tuptable->vals[row],
SPI_tuptable->tupdesc, SPI_fnumber(SPI_tuptable->tupdesc, "data"));

raise TRAP: FailedAssertion("!(IsTransactionState())", File: "catcache.c",
Line: 1213)

but

const char *data = SPI_getvalue_my(SPI_tuptable->vals[row],
SPI_tuptable->tupdesc, SPI_fnumber(SPI_tuptable->tupdesc, "data"));

where

char *SPI_getvalue_my(HeapTuple tuple, TupleDesc tupdesc, int fnumber) {
    bool isnull;
    Datum datum = SPI_getbinval(tuple, tupdesc, fnumber, &isnull);
    if (isnull) return NULL;
    return TextDatumGetCString(datum);
}

works ok


pgsql-bugs by date:

Previous
From: Artur Zakirov
Date:
Subject: Re: Full text search bug ('russian' regconfig)
Next
From: Michael Paquier
Date:
Subject: Re: BUG #16268: SPI_getvalue requires IsTransactionState butTextDatumGetCString of SPI_getbinval - not!