mirror of
https://github.com/postgres/postgres.git
synced 2025-07-23 03:21:12 +03:00
Error message editing in backend/access.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.151 2003/02/23 20:32:11 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.152 2003/07/21 20:29:38 tgl Exp $
|
||||
*
|
||||
*
|
||||
* INTERFACE ROUTINES
|
||||
@ -134,19 +134,16 @@ heapgettup(Relation relation,
|
||||
*/
|
||||
#ifdef HEAPDEBUGALL
|
||||
if (ItemPointerIsValid(tid))
|
||||
{
|
||||
elog(LOG, "heapgettup(%s, tid=0x%x[%d,%d], dir=%d, ...)",
|
||||
elog(DEBUG2, "heapgettup(%s, tid=0x%x[%d,%d], dir=%d, ...)",
|
||||
RelationGetRelationName(relation), tid, tid->ip_blkid,
|
||||
tid->ip_posid, dir);
|
||||
}
|
||||
else
|
||||
{
|
||||
elog(LOG, "heapgettup(%s, tid=0x%x, dir=%d, ...)",
|
||||
elog(DEBUG2, "heapgettup(%s, tid=0x%x, dir=%d, ...)",
|
||||
RelationGetRelationName(relation), tid, dir);
|
||||
}
|
||||
elog(LOG, "heapgettup(..., b=0x%x, nkeys=%d, key=0x%x", buffer, nkeys, key);
|
||||
|
||||
elog(LOG, "heapgettup: relation(%c)=`%s', %p",
|
||||
elog(DEBUG2, "heapgettup(..., b=0x%x, nkeys=%d, key=0x%x", buffer, nkeys, key);
|
||||
|
||||
elog(DEBUG2, "heapgettup: relation(%c)=`%s', %p",
|
||||
relation->rd_rel->relkind, RelationGetRelationName(relation),
|
||||
snapshot);
|
||||
#endif /* !defined(HEAPLOGALL) */
|
||||
@ -194,7 +191,7 @@ heapgettup(Relation relation,
|
||||
relation,
|
||||
ItemPointerGetBlockNumber(tid));
|
||||
if (!BufferIsValid(*buffer))
|
||||
elog(ERROR, "heapgettup: failed ReadBuffer");
|
||||
elog(ERROR, "ReadBuffer failed");
|
||||
|
||||
LockBuffer(*buffer, BUFFER_LOCK_SHARE);
|
||||
|
||||
@ -229,7 +226,7 @@ heapgettup(Relation relation,
|
||||
relation,
|
||||
page);
|
||||
if (!BufferIsValid(*buffer))
|
||||
elog(ERROR, "heapgettup: failed ReadBuffer");
|
||||
elog(ERROR, "ReadBuffer failed");
|
||||
|
||||
LockBuffer(*buffer, BUFFER_LOCK_SHARE);
|
||||
|
||||
@ -269,7 +266,7 @@ heapgettup(Relation relation,
|
||||
relation,
|
||||
page);
|
||||
if (!BufferIsValid(*buffer))
|
||||
elog(ERROR, "heapgettup: failed ReadBuffer");
|
||||
elog(ERROR, "ReadBuffer failed");
|
||||
|
||||
LockBuffer(*buffer, BUFFER_LOCK_SHARE);
|
||||
|
||||
@ -363,7 +360,7 @@ heapgettup(Relation relation,
|
||||
relation,
|
||||
page);
|
||||
if (!BufferIsValid(*buffer))
|
||||
elog(ERROR, "heapgettup: failed ReadBuffer");
|
||||
elog(ERROR, "ReadBuffer failed");
|
||||
|
||||
LockBuffer(*buffer, BUFFER_LOCK_SHARE);
|
||||
dp = (Page) BufferGetPage(*buffer);
|
||||
@ -459,7 +456,7 @@ relation_open(Oid relationId, LOCKMODE lockmode)
|
||||
r = RelationIdGetRelation(relationId);
|
||||
|
||||
if (!RelationIsValid(r))
|
||||
elog(ERROR, "Relation %u does not exist", relationId);
|
||||
elog(ERROR, "could not open relation with OID %u", relationId);
|
||||
|
||||
if (lockmode != NoLock)
|
||||
LockRelation(r, lockmode);
|
||||
@ -532,7 +529,7 @@ relation_openr(const char *sysRelationName, LOCKMODE lockmode)
|
||||
r = RelationSysNameGetRelation(sysRelationName);
|
||||
|
||||
if (!RelationIsValid(r))
|
||||
elog(ERROR, "Relation \"%s\" does not exist", sysRelationName);
|
||||
elog(ERROR, "could not open relation \"%s\"", sysRelationName);
|
||||
|
||||
if (lockmode != NoLock)
|
||||
LockRelation(r, lockmode);
|
||||
@ -578,14 +575,20 @@ heap_open(Oid relationId, LOCKMODE lockmode)
|
||||
r = relation_open(relationId, lockmode);
|
||||
|
||||
if (r->rd_rel->relkind == RELKIND_INDEX)
|
||||
elog(ERROR, "%s is an index relation",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is an index relation",
|
||||
RelationGetRelationName(r))));
|
||||
else if (r->rd_rel->relkind == RELKIND_SPECIAL)
|
||||
elog(ERROR, "%s is a special relation",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is a special relation",
|
||||
RelationGetRelationName(r))));
|
||||
else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE)
|
||||
elog(ERROR, "%s is a composite type",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is a composite type",
|
||||
RelationGetRelationName(r))));
|
||||
|
||||
pgstat_initstats(&r->pgstat_info, r);
|
||||
|
||||
@ -607,14 +610,20 @@ heap_openrv(const RangeVar *relation, LOCKMODE lockmode)
|
||||
r = relation_openrv(relation, lockmode);
|
||||
|
||||
if (r->rd_rel->relkind == RELKIND_INDEX)
|
||||
elog(ERROR, "%s is an index relation",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is an index relation",
|
||||
RelationGetRelationName(r))));
|
||||
else if (r->rd_rel->relkind == RELKIND_SPECIAL)
|
||||
elog(ERROR, "%s is a special relation",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is a special relation",
|
||||
RelationGetRelationName(r))));
|
||||
else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE)
|
||||
elog(ERROR, "%s is a composite type",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is a composite type",
|
||||
RelationGetRelationName(r))));
|
||||
|
||||
pgstat_initstats(&r->pgstat_info, r);
|
||||
|
||||
@ -636,14 +645,20 @@ heap_openr(const char *sysRelationName, LOCKMODE lockmode)
|
||||
r = relation_openr(sysRelationName, lockmode);
|
||||
|
||||
if (r->rd_rel->relkind == RELKIND_INDEX)
|
||||
elog(ERROR, "%s is an index relation",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is an index relation",
|
||||
RelationGetRelationName(r))));
|
||||
else if (r->rd_rel->relkind == RELKIND_SPECIAL)
|
||||
elog(ERROR, "%s is a special relation",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is a special relation",
|
||||
RelationGetRelationName(r))));
|
||||
else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE)
|
||||
elog(ERROR, "%s is a composite type",
|
||||
RelationGetRelationName(r));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is a composite type",
|
||||
RelationGetRelationName(r))));
|
||||
|
||||
pgstat_initstats(&r->pgstat_info, r);
|
||||
|
||||
@ -661,12 +676,6 @@ heap_beginscan(Relation relation, Snapshot snapshot,
|
||||
{
|
||||
HeapScanDesc scan;
|
||||
|
||||
/*
|
||||
* sanity checks
|
||||
*/
|
||||
if (!RelationIsValid(relation))
|
||||
elog(ERROR, "heap_beginscan: !RelationIsValid(relation)");
|
||||
|
||||
/*
|
||||
* increment relation ref count while scanning relation
|
||||
*
|
||||
@ -767,14 +776,12 @@ heap_endscan(HeapScanDesc scan)
|
||||
|
||||
#ifdef HEAPDEBUGALL
|
||||
#define HEAPDEBUG_1 \
|
||||
elog(LOG, "heap_getnext([%s,nkeys=%d],dir=%d) called", \
|
||||
elog(DEBUG2, "heap_getnext([%s,nkeys=%d],dir=%d) called", \
|
||||
RelationGetRelationName(scan->rs_rd), scan->rs_nkeys, (int) direction)
|
||||
|
||||
#define HEAPDEBUG_2 \
|
||||
elog(LOG, "heap_getnext returning EOS")
|
||||
|
||||
elog(DEBUG2, "heap_getnext returning EOS")
|
||||
#define HEAPDEBUG_3 \
|
||||
elog(LOG, "heap_getnext returning tuple")
|
||||
elog(DEBUG2, "heap_getnext returning tuple")
|
||||
#else
|
||||
#define HEAPDEBUG_1
|
||||
#define HEAPDEBUG_2
|
||||
@ -787,12 +794,6 @@ heap_getnext(HeapScanDesc scan, ScanDirection direction)
|
||||
{
|
||||
/* Note: no locking manipulations needed */
|
||||
|
||||
/*
|
||||
* argument checks
|
||||
*/
|
||||
if (scan == NULL)
|
||||
elog(ERROR, "heap_getnext: NULL relscan");
|
||||
|
||||
HEAPDEBUG_1; /* heap_getnext( info ) */
|
||||
|
||||
/*
|
||||
@ -847,7 +848,7 @@ heap_getnext(HeapScanDesc scan, ScanDirection direction)
|
||||
* the tuple); when keep_buf = false, the pin is released and *userbuf is set
|
||||
* to InvalidBuffer.
|
||||
*
|
||||
* It is somewhat inconsistent that we elog() on invalid block number but
|
||||
* It is somewhat inconsistent that we ereport() on invalid block number but
|
||||
* return false on invalid item number. This is historical. The only
|
||||
* justification I can see is that the caller can relatively easily check the
|
||||
* block number for validity, but cannot check the item number without reading
|
||||
@ -875,7 +876,7 @@ heap_fetch(Relation relation,
|
||||
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
|
||||
|
||||
if (!BufferIsValid(buffer))
|
||||
elog(ERROR, "heap_fetch: ReadBuffer(%s, %lu) failed",
|
||||
elog(ERROR, "ReadBuffer(\"%s\", %lu) failed",
|
||||
RelationGetRelationName(relation),
|
||||
(unsigned long) ItemPointerGetBlockNumber(tid));
|
||||
|
||||
@ -985,8 +986,9 @@ heap_get_latest_tid(Relation relation,
|
||||
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
|
||||
|
||||
if (!BufferIsValid(buffer))
|
||||
elog(ERROR, "heap_get_latest_tid: %s relation: ReadBuffer(%lx) failed",
|
||||
RelationGetRelationName(relation), (long) tid);
|
||||
elog(ERROR, "ReadBuffer(\"%s\", %lu) failed",
|
||||
RelationGetRelationName(relation),
|
||||
(unsigned long) ItemPointerGetBlockNumber(tid));
|
||||
|
||||
LockBuffer(buffer, BUFFER_LOCK_SHARE);
|
||||
|
||||
@ -1103,7 +1105,7 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid)
|
||||
/* Find buffer to insert this tuple into */
|
||||
buffer = RelationGetBufferForTuple(relation, tup->t_len, InvalidBuffer);
|
||||
|
||||
/* NO ELOG(ERROR) from here till changes are logged */
|
||||
/* NO EREPORT(ERROR) from here till changes are logged */
|
||||
START_CRIT_SECTION();
|
||||
|
||||
RelationPutHeapTuple(relation, buffer, tup);
|
||||
@ -1219,7 +1221,7 @@ heap_delete(Relation relation, ItemPointer tid,
|
||||
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
|
||||
|
||||
if (!BufferIsValid(buffer))
|
||||
elog(ERROR, "heap_delete: failed ReadBuffer");
|
||||
elog(ERROR, "ReadBuffer failed");
|
||||
|
||||
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
|
||||
|
||||
@ -1238,7 +1240,7 @@ l1:
|
||||
{
|
||||
LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
|
||||
ReleaseBuffer(buffer);
|
||||
elog(ERROR, "heap_delete: (am)invalid tid");
|
||||
elog(ERROR, "attempted to delete invisible tuple");
|
||||
}
|
||||
else if (result == HeapTupleBeingUpdated)
|
||||
{
|
||||
@ -1358,7 +1360,7 @@ l1:
|
||||
* This routine may be used to delete a tuple when concurrent updates of
|
||||
* the target tuple are not expected (for example, because we have a lock
|
||||
* on the relation associated with the tuple). Any failure is reported
|
||||
* via elog().
|
||||
* via ereport().
|
||||
*/
|
||||
void
|
||||
simple_heap_delete(Relation relation, ItemPointer tid)
|
||||
@ -1371,7 +1373,7 @@ simple_heap_delete(Relation relation, ItemPointer tid)
|
||||
{
|
||||
case HeapTupleSelfUpdated:
|
||||
/* Tuple was already updated in current command? */
|
||||
elog(ERROR, "simple_heap_delete: tuple already updated by self");
|
||||
elog(ERROR, "tuple already updated by self");
|
||||
break;
|
||||
|
||||
case HeapTupleMayBeUpdated:
|
||||
@ -1379,11 +1381,11 @@ simple_heap_delete(Relation relation, ItemPointer tid)
|
||||
break;
|
||||
|
||||
case HeapTupleUpdated:
|
||||
elog(ERROR, "simple_heap_delete: tuple concurrently updated");
|
||||
elog(ERROR, "tuple concurrently updated");
|
||||
break;
|
||||
|
||||
default:
|
||||
elog(ERROR, "Unknown status %u from heap_delete", result);
|
||||
elog(ERROR, "unrecognized heap_delete status: %u", result);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1413,7 +1415,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
|
||||
|
||||
buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(otid));
|
||||
if (!BufferIsValid(buffer))
|
||||
elog(ERROR, "heap_update: failed ReadBuffer");
|
||||
elog(ERROR, "ReadBuffer failed");
|
||||
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
|
||||
|
||||
dp = (PageHeader) BufferGetPage(buffer);
|
||||
@ -1438,7 +1440,7 @@ l2:
|
||||
{
|
||||
LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
|
||||
ReleaseBuffer(buffer);
|
||||
elog(ERROR, "heap_update: (am)invalid tid");
|
||||
elog(ERROR, "attempted to update invisible tuple");
|
||||
}
|
||||
else if (result == HeapTupleBeingUpdated)
|
||||
{
|
||||
@ -1611,7 +1613,7 @@ l2:
|
||||
* buffer, only one pin is held.
|
||||
*/
|
||||
|
||||
/* NO ELOG(ERROR) from here till changes are logged */
|
||||
/* NO EREPORT(ERROR) from here till changes are logged */
|
||||
START_CRIT_SECTION();
|
||||
|
||||
RelationPutHeapTuple(relation, newbuf, newtup); /* insert new tuple */
|
||||
@ -1688,7 +1690,7 @@ l2:
|
||||
* This routine may be used to update a tuple when concurrent updates of
|
||||
* the target tuple are not expected (for example, because we have a lock
|
||||
* on the relation associated with the tuple). Any failure is reported
|
||||
* via elog().
|
||||
* via ereport().
|
||||
*/
|
||||
void
|
||||
simple_heap_update(Relation relation, ItemPointer otid, HeapTuple tup)
|
||||
@ -1701,7 +1703,7 @@ simple_heap_update(Relation relation, ItemPointer otid, HeapTuple tup)
|
||||
{
|
||||
case HeapTupleSelfUpdated:
|
||||
/* Tuple was already updated in current command? */
|
||||
elog(ERROR, "simple_heap_update: tuple already updated by self");
|
||||
elog(ERROR, "tuple already updated by self");
|
||||
break;
|
||||
|
||||
case HeapTupleMayBeUpdated:
|
||||
@ -1709,11 +1711,11 @@ simple_heap_update(Relation relation, ItemPointer otid, HeapTuple tup)
|
||||
break;
|
||||
|
||||
case HeapTupleUpdated:
|
||||
elog(ERROR, "simple_heap_update: tuple concurrently updated");
|
||||
elog(ERROR, "tuple concurrently updated");
|
||||
break;
|
||||
|
||||
default:
|
||||
elog(ERROR, "Unknown status %u from heap_update", result);
|
||||
elog(ERROR, "unrecognized heap_update status: %u", result);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1733,7 +1735,7 @@ heap_mark4update(Relation relation, HeapTuple tuple, Buffer *buffer,
|
||||
*buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
|
||||
|
||||
if (!BufferIsValid(*buffer))
|
||||
elog(ERROR, "heap_mark4update: failed ReadBuffer");
|
||||
elog(ERROR, "ReadBuffer failed");
|
||||
|
||||
LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE);
|
||||
|
||||
@ -1750,7 +1752,7 @@ l3:
|
||||
{
|
||||
LockBuffer(*buffer, BUFFER_LOCK_UNLOCK);
|
||||
ReleaseBuffer(*buffer);
|
||||
elog(ERROR, "heap_mark4update: (am)invalid tid");
|
||||
elog(ERROR, "attempted to mark4update invisible tuple");
|
||||
}
|
||||
else if (result == HeapTupleBeingUpdated)
|
||||
{
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Id: hio.c,v 1.47 2003/02/13 05:35:11 momjian Exp $
|
||||
* $Id: hio.c,v 1.48 2003/07/21 20:29:38 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -23,7 +23,7 @@
|
||||
/*
|
||||
* RelationPutHeapTuple - place tuple at specified page
|
||||
*
|
||||
* !!! ELOG(ERROR) IS DISALLOWED HERE !!!
|
||||
* !!! EREPORT(ERROR) IS DISALLOWED HERE !!! Must PANIC on failure!!!
|
||||
*
|
||||
* Note - caller must hold BUFFER_LOCK_EXCLUSIVE on the buffer.
|
||||
*/
|
||||
@ -44,7 +44,7 @@ RelationPutHeapTuple(Relation relation,
|
||||
tuple->t_len, InvalidOffsetNumber, LP_USED);
|
||||
|
||||
if (offnum == InvalidOffsetNumber)
|
||||
elog(PANIC, "RelationPutHeapTuple: failed to add tuple");
|
||||
elog(PANIC, "failed to add tuple to page");
|
||||
|
||||
/* Update tuple->t_self to the actual position where it was stored */
|
||||
ItemPointerSet(&(tuple->t_self), BufferGetBlockNumber(buffer), offnum);
|
||||
@ -84,7 +84,7 @@ RelationPutHeapTuple(Relation relation,
|
||||
* for indices only. Alternatively, we could define pseudo-table as
|
||||
* we do for transactions with XactLockTable.
|
||||
*
|
||||
* ELOG(ERROR) is allowed here, so this routine *must* be called
|
||||
* ereport(ERROR) is allowed here, so this routine *must* be called
|
||||
* before any (unlogged) changes are made in buffer pool.
|
||||
*/
|
||||
Buffer
|
||||
@ -104,8 +104,11 @@ RelationGetBufferForTuple(Relation relation, Size len,
|
||||
* If we're gonna fail for oversize tuple, do it right away
|
||||
*/
|
||||
if (len > MaxTupleSize)
|
||||
elog(ERROR, "Tuple is too big: size %lu, max size %ld",
|
||||
(unsigned long) len, MaxTupleSize);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
||||
errmsg("tuple is too big: size %lu, maximum size %lu",
|
||||
(unsigned long) len,
|
||||
(unsigned long) MaxTupleSize)));
|
||||
|
||||
if (otherBuffer != InvalidBuffer)
|
||||
otherBlock = BufferGetBlockNumber(otherBuffer);
|
||||
@ -268,7 +271,7 @@ RelationGetBufferForTuple(Relation relation, Size len,
|
||||
if (len > PageGetFreeSpace(pageHeader))
|
||||
{
|
||||
/* We should not get here given the test at the top */
|
||||
elog(PANIC, "Tuple is too big: size %lu", (unsigned long) len);
|
||||
elog(PANIC, "tuple is too big: size %lu", (unsigned long) len);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/tuptoaster.c,v 1.36 2002/09/04 20:31:09 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/tuptoaster.c,v 1.37 2003/07/21 20:29:39 tgl Exp $
|
||||
*
|
||||
*
|
||||
* INTERFACE ROUTINES
|
||||
@ -896,7 +896,7 @@ toast_save_datum(Relation rel, Datum value)
|
||||
memcpy(VARATT_DATA(&chunk_data), data_p, chunk_size);
|
||||
toasttup = heap_formtuple(toasttupDesc, t_values, t_nulls);
|
||||
if (!HeapTupleIsValid(toasttup))
|
||||
elog(ERROR, "Failed to build TOAST tuple");
|
||||
elog(ERROR, "failed to build TOAST tuple");
|
||||
|
||||
simple_heap_insert(toastrel, toasttup);
|
||||
|
||||
@ -912,7 +912,7 @@ toast_save_datum(Relation rel, Datum value)
|
||||
&(toasttup->t_self),
|
||||
toastrel, toastidx->rd_index->indisunique);
|
||||
if (idxres == NULL)
|
||||
elog(ERROR, "Failed to insert index entry for TOAST tuple");
|
||||
elog(ERROR, "failed to insert index entry for TOAST tuple");
|
||||
|
||||
/*
|
||||
* Free memory
|
||||
|
Reference in New Issue
Block a user