Fix incorrect output from pgoutput when using column lists.
authorAmit Kapila <akapila@postgresql.org>
Fri, 2 Dec 2022 05:22:08 +0000 (10:52 +0530)
committerAmit Kapila <akapila@postgresql.org>
Fri, 2 Dec 2022 05:22:58 +0000 (10:52 +0530)
commit40b1491357a4a092ea054176944cf76e2fe3eff8
tree5ccf254873197f5e957216b6b119f9da273961df
parent069de07eae7328f13be40f1f3988448639c04285
Fix incorrect output from pgoutput when using column lists.

For Updates and Deletes, we were not honoring the columns list for old
tuple values while sending tuple data via pgoutput. This results in
pgoutput emitting more columns than expected.

This is not a problem for built-in logical replication as we simply ignore
additional columns based on the relation information sent previously which
didn't have those columns. However, some other users of pgoutput plugin
may expect the columns as per the column list. Also, sending extra columns
unnecessarily consumes network bandwidth defeating the purpose of the
column list feature.

Reported-by: Gunnar Morling
Author: Hou Zhijie
Reviewed-by: Amit Kapila
Backpatch-through: 15
Discussion: https://postgr.es/m/CADGJaX9kiRZ-OH0EpWF5Fkyh1ZZYofoNRCrhapBfdk02tj5EKg@mail.gmail.com
src/backend/replication/logical/proto.c
src/backend/replication/pgoutput/pgoutput.c
src/include/replication/logicalproto.h
src/test/subscription/t/031_column_list.pl