Kluge slot_compile_deform() to ignore incorrect attnotnull markings.
authorTom Lane <[email protected]>
Mon, 20 Jul 2020 19:54:24 +0000 (15:54 -0400)
committerTom Lane <[email protected]>
Mon, 20 Jul 2020 19:54:24 +0000 (15:54 -0400)
commit798b4faefd205a8527afb82c9a87a419d2e06098
treed26c315bf6cd0e7f98c29f6b9ef648d369c47700
parent71e561bd4bc2d6e85f9a1ae8064d8b190dcad2b4
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
src/backend/jit/llvm/llvmjit_deform.c
src/test/regress/expected/subscription.out
src/test/regress/sql/subscription.sql