From 38fed9c094fe0fa11bf2072e7defe442433d05b3 Mon Sep 17 00:00:00 2001
From: Petr Jelinek <pjmodos@pjmodos.net>
Date: Fri, 4 Aug 2017 11:38:27 +0200
Subject: [PATCH] Fix handling of dropped columns in logical replication
 relation attribute map

Fixes bug #14769
---
 src/backend/replication/logical/relation.c | 3 +++
 src/backend/replication/logical/worker.c   | 4 +++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c
index 7779857..a7ea16d 100644
--- a/src/backend/replication/logical/relation.c
+++ b/src/backend/replication/logical/relation.c
@@ -280,7 +280,10 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode)
 			int			attnum;
 
 			if (desc->attrs[i]->attisdropped)
+			{
+				entry->attrmap[i] = -1;
 				continue;
+			}
 
 			attnum = logicalrep_rel_att_by_name(remoterel,
 												NameStr(desc->attrs[i]->attname));
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index 0d48dfa..1f73e76 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -391,6 +391,7 @@ slot_modify_cstrings(TupleTableSlot *slot, LogicalRepRelMapEntry *rel,
 		Form_pg_attribute att = slot->tts_tupleDescriptor->attrs[i];
 		int			remoteattnum = rel->attrmap[i];
 
+
 		if (remoteattnum >= 0 && !replaces[remoteattnum])
 			continue;
 
@@ -402,7 +403,8 @@ slot_modify_cstrings(TupleTableSlot *slot, LogicalRepRelMapEntry *rel,
 			errarg.attnum = remoteattnum;
 
 			getTypeInputInfo(att->atttypid, &typinput, &typioparam);
-			slot->tts_values[i] = OidInputFunctionCall(typinput, values[i],
+			slot->tts_values[i] = OidInputFunctionCall(typinput,
+													   values[remoteattnum],
 													   typioparam,
 													   att->atttypmod);
 			slot->tts_isnull[i] = false;
-- 
2.7.4

