pgsql: Avoid unconditionally filling in missing values with NULL in pgo

From: Amit Kapila <akapila(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Avoid unconditionally filling in missing values with NULL in pgo
Date: 2023-11-27 03:49:56
Message-ID: E1r7Sd9-007RnK-Qp@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Avoid unconditionally filling in missing values with NULL in pgoutput.

52e4f0cd4 introduced a bug in pgoutput in which missing values in tuples
were incorrectly filled in with NULL. The problem was the use of
CreateTupleDescCopy where CreateTupleDescCopyConstr was required, as the
former drops the constraints in the tuple description (specifically, the
default value constraint) on the floor.

The bug could result in incorrectness when a table replicated via
`REPLICA IDENTITY FULL` underwent a schema change that added a column
with a default value. The problem is that in such cases updates fill NULL
values in old tuples for missing columns for default values. Then on the
subscriber, we failed to find a matching tuple and missed updating the
required row.

Author: Nikhil Benesch
Reviewed-by: Hou Zhijie, Amit Kapila
Backpatch-through: 15
Discussion: http://postgr.es/m/CAPWqQZTEpZQamYsGMn6ZDRvVywwpVPiKH6OY4KSgA+NmeqFNzA@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/360392fa2a9bb74338b4864790d18eadb13fd8a8

Modified Files
--------------
src/backend/replication/pgoutput/pgoutput.c | 4 +--
src/test/subscription/t/100_bugs.pl | 53 +++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Heikki Linnakangas 2023-11-27 15:52:29 pgsql: Reduce rate of walwriter wakeups due to async commits.
Previous Message Alexander Korotkov 2023-11-27 00:52:53 pgsql: Track statement entry timestamp in contrib/pg_stat_statements