]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
concurrent repack: check there are no leftover toast attribs
authorÁlvaro Herrera <alvherre@kurilemu.de>
Tue, 16 Jun 2026 12:26:31 +0000 (14:26 +0200)
committerÁlvaro Herrera <alvherre@kurilemu.de>
Tue, 16 Jun 2026 12:26:31 +0000 (14:26 +0200)
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

src/backend/commands/repack.c

index ec100e3eef555c3ee64df44aff8040734d6be858..4d177c868bbcde356289fa5d44b49c9d90569823 100644 (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);
        }
 }