Re: "Missing" column in Postgres logical replication update message

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
Cc: Kevin Martin <martinkd(at)gmail(dot)com>, pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: "Missing" column in Postgres logical replication update message
Date: 2022-08-03 15:28:24
Message-ID: 3043713.1659540504@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> writes:
> On 8/3/22 08:09, Kevin Martin wrote:
>> I thought that any UPDATE message in the replication logs is designed to
>> include all values for all columns.  Is that correct?

Buried deep in the wire protocol specification is this bit:

----
The following message parts are shared by the above messages.

TupleData

Int16
Number of columns.

Next, one of the following submessages appears for each column (except generated columns):

...

Byte1('u')
Identifies unchanged TOASTed value (the actual value is not sent).
----

So that right there is two cases where we omit data for a column.
I suspect the "unchanged toasted data" case is what matters for
your purposes. Maybe you've found some code that fails to implement
that correctly?

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Daniel Verite 2022-08-03 15:46:28 Re: ICU is not supported in this build. install from source code.
Previous Message Kevin Martin 2022-08-03 15:19:03 Re: "Missing" column in Postgres logical replication update message