Commit 8ecdc2ff authored by Tom Lane's avatar Tom Lane

Use ereport not elog for some corrupt-HOT-chain reports.

These errors have been seen in the field in corrupted-data situations.
It seems worthwhile to report them with ERRCODE_DATA_CORRUPTED, rather
than the generic ERRCODE_INTERNAL_ERROR, for the benefit of log monitoring
and tools like amcheck.  However, use errmsg_internal so that the text
strings still aren't translated; it seems unlikely to be worth
translators' time to do so.

Back-patch to 9.3, like the predecessor commit d70cf811 that introduced
these elog calls originally (replacing Asserts).

Peter Geoghegan

Discussion: https://postgr.es/m/CAH2-Wzmn4-Pg-UGFwyuyK-wiTih9j32pwg_7T9iwqXpAUZr=Mg@mail.gmail.com
parent 477ad05e
...@@ -2862,9 +2862,12 @@ IndexBuildHeapRangeScan(Relation heapRelation, ...@@ -2862,9 +2862,12 @@ IndexBuildHeapRangeScan(Relation heapRelation,
offnum = ItemPointerGetOffsetNumber(&heapTuple->t_self); offnum = ItemPointerGetOffsetNumber(&heapTuple->t_self);
if (!OffsetNumberIsValid(root_offsets[offnum - 1])) if (!OffsetNumberIsValid(root_offsets[offnum - 1]))
elog(ERROR, "failed to find parent tuple for heap-only tuple at (%u,%u) in table \"%s\"", ereport(ERROR,
(errcode(ERRCODE_DATA_CORRUPTED),
errmsg_internal("failed to find parent tuple for heap-only tuple at (%u,%u) in table \"%s\"",
ItemPointerGetBlockNumber(&heapTuple->t_self), ItemPointerGetBlockNumber(&heapTuple->t_self),
offnum, RelationGetRelationName(heapRelation)); offnum,
RelationGetRelationName(heapRelation))));
ItemPointerSetOffsetNumber(&rootTuple.t_self, ItemPointerSetOffsetNumber(&rootTuple.t_self,
root_offsets[offnum - 1]); root_offsets[offnum - 1]);
...@@ -3327,10 +3330,12 @@ validate_index_heapscan(Relation heapRelation, ...@@ -3327,10 +3330,12 @@ validate_index_heapscan(Relation heapRelation,
{ {
root_offnum = root_offsets[root_offnum - 1]; root_offnum = root_offsets[root_offnum - 1];
if (!OffsetNumberIsValid(root_offnum)) if (!OffsetNumberIsValid(root_offnum))
elog(ERROR, "failed to find parent tuple for heap-only tuple at (%u,%u) in table \"%s\"", ereport(ERROR,
(errcode(ERRCODE_DATA_CORRUPTED),
errmsg_internal("failed to find parent tuple for heap-only tuple at (%u,%u) in table \"%s\"",
ItemPointerGetBlockNumber(heapcursor), ItemPointerGetBlockNumber(heapcursor),
ItemPointerGetOffsetNumber(heapcursor), ItemPointerGetOffsetNumber(heapcursor),
RelationGetRelationName(heapRelation)); RelationGetRelationName(heapRelation))));
ItemPointerSetOffsetNumber(&rootTuple, root_offnum); ItemPointerSetOffsetNumber(&rootTuple, root_offnum);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment