Overflow of attmissingval is not handled gracefully

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Andrew Dunstan <andrew(at)dunslane(dot)net>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Overflow of attmissingval is not handled gracefully
Date: 2022-02-28 23:21:54
Message-ID: 2749689.1646090514@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Consider this admittedly-rather-contrived example:

regression=# create table foo(f1 int);
CREATE TABLE
regression=# alter table foo add column bar text default repeat('xyzzy', 1000000);
ERROR: row is too big: size 57416, maximum size 8160

Since the table contains no rows at all, this is a surprising
failure. The reason for it of course is that pg_attribute
has no TOAST table, so it can't store indefinitely large
attmissingval fields.

I think the simplest answer, and likely the only feasible one for
the back branches, is to disable the attmissingval optimization
if the proposed value is "too large". Not sure exactly where the
threshold for that ought to be, but maybe BLCKSZ/8 could be a
starting offer.

regards, tom lane

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2022-02-28 23:36:14 Re: Overflow of attmissingval is not handled gracefully
Previous Message Tom Lane 2022-02-28 23:08:48 Re: [PATCH] Add TOAST support for several system tables