pgsql: Assert that we don't insert nulls into attnotnull catalog column

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Assert that we don't insert nulls into attnotnull catalog column
Date: 2020-07-21 16:38:34
Message-ID: E1jxvHm-0002KM-Do@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Assert that we don't insert nulls into attnotnull catalog columns.

The executor checks for this error, and so does the bootstrap catalog
loader, but we never checked for it in retail catalog manipulations.
The folly of that has now been exposed, so let's add assertions
checking it. Checking in CatalogTupleInsert[WithInfo] and
CatalogTupleUpdate[WithInfo] should be enough to cover this.

Back-patch to v10; the aforesaid functions didn't exist before that,
and it didn't seem worth adapting the patch to the oldest branches.
But given the risk of JIT crashes, I think we certainly need this
as far back as v11.

Pre-v13, we have to explicitly exclude pg_subscription.subslotname
and pg_subscription_rel.srsublsn from the checks, since they are
mismarked. (Even if we change our mind about applying BKI_FORCE_NULL
in the branch tips, it doesn't seem wise to have assertions that
would fire in existing databases.)

Discussion: https://postgr.es/m/298837.1595196283@sss.pgh.pa.us

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/fb71329ad6fcd81dd3fcfb1f21308ccb64f7a834

Modified Files
--------------
src/backend/catalog/indexing.c | 57 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2020-07-21 17:03:56 pgsql: Be more careful about marking catalog columns NOT NULL by defaul
Previous Message Tom Lane 2020-07-21 15:40:59 pgsql: Avoid direct C access to possibly-null pg_subscription_rel.srsub