concurrent repack: check there are no leftover toast attribs

Upon reading attributes from the file of concurrent changes, verify that
none are left over unprocessed after we read all columns for the tuple.
This should never happen, so add an elog(ERROR) for it.

While at it, downgrade a nearby message from ereport() to elog().  These
things should never happen.

Author: Aleksander Alekseev <aleksander@tigerdata.com>
Discussion: https://postgr.es/m/CAJ7c6TMSF7cANU8nEJ9E28EvU74tE4H7AzT292Rt3ZuHqqxq8w@mail.gmail.com
This commit is contained in:
Álvaro Herrera 2026-06-16 14:26:31 +02:00
parent ae39bd23c6
commit e2a8cabc47
No known key found for this signature in database
GPG key ID: 1C20ACB9D5C564AE

View file

@ -2806,10 +2806,13 @@ restore_tuple(BufFile *file, Relation relation, TupleTableSlot *slot)
slot->tts_values[i] = PointerGetDatum(value);
natt_ext--;
if (natt_ext < 0)
ereport(ERROR,
errcode(ERRCODE_DATA_CORRUPTED),
errmsg("insufficient number of attributes stored separately"));
elog(ERROR, "insufficient number of attributes stored separately");
}
if (natt_ext != 0)
elog(ERROR,
"unexpected number of attributes stored separately (%d remaining)",
natt_ext);
}
}