pgsql: Kluge slot_compile_deform() to ignore incorrect attnotnull marki

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Kluge slot_compile_deform() to ignore incorrect attnotnull marki
Date: 2020-07-20 19:54:38
Message-ID: E1jxbry-000382-3f@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Kluge slot_compile_deform() to ignore incorrect attnotnull markings.

Since we mustn't force an initdb in released branches, there is no
simple way to correct the markings of pg_subscription.subslotname
and pg_subscription_rel.srsublsn as attnotnull in existing pre-v13
installations.

Fortunately, released branches don't rely on attnotnull being correct
for much. The planner looks at it in relation_excluded_by_constraints,
but it'd be difficult to get that to matter for a query on a system
catalog. The only place where it's really problematic is in JIT's
slot_compile_deform(), which can produce incorrect code that crashes
if there are NULLs in an allegedly not-null column.

Hence, hack up slot_compile_deform() to be specifically aware of
these two incorrect markings and not trust them.

This applies to v11 and v12; the JIT code didn't exist before that,
and we've fixed the markings in v13.

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

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/855195a7ba9875648f958c42aba91ad382e82edd

Modified Files
--------------
src/backend/jit/llvm/llvmjit_deform.c | 24 ++++++++++++++++++++----
src/test/regress/expected/subscription.out | 7 +++++++
src/test/regress/sql/subscription.sql | 2 ++
3 files changed, 29 insertions(+), 4 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Geoghegan 2020-07-20 23:06:16 pgsql: Assert that buffer is pinned in LockBuffer().
Previous Message Tom Lane 2020-07-20 18:56:05 pgsql: Correctly mark pg_subscription_rel.srsublsn as nullable.