From c3368f9173c13e2e293df91f75f1a5c565c4ca18 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 23 Feb 2017 11:27:59 -0500 Subject: [PATCH] Fix logical replication with different encodings reported by Shinoda, Noriyoshi ; partial patch by Kyotaro HORIGUCHI --- .../replication/libpqwalreceiver/libpqwalreceiver.c | 8 ++++++++ src/backend/replication/logical/proto.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 44a89c73fd..44ded74f51 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -22,6 +22,7 @@ #include "libpq-fe.h" #include "pqexpbuffer.h" #include "access/xlog.h" +#include "mb/pg_wchar.h" #include "miscadmin.h" #include "pgstat.h" #include "replication/logicalproto.h" @@ -134,9 +135,16 @@ libpqrcv_connect(const char *conninfo, bool logical, const char *appname, } keys[++i] = "fallback_application_name"; vals[i] = appname; + if (logical) + { + keys[++i] = "client_encoding"; + vals[i] = GetDatabaseEncodingName(); + } keys[++i] = NULL; vals[i] = NULL; + Assert(i < sizeof(keys)); + conn = palloc0(sizeof(WalReceiverConn)); conn->streamConn = PQconnectdbParams(keys, vals, /* expand_dbname = */ true); if (PQstatus(conn->streamConn) != CONNECTION_OK) diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c index 142cd993cd..bc6e9b5a98 100644 --- a/src/backend/replication/logical/proto.c +++ b/src/backend/replication/logical/proto.c @@ -444,7 +444,7 @@ logicalrep_write_tuple(StringInfo out, Relation rel, HeapTuple tuple) outputstr = OidOutputFunctionCall(typclass->typoutput, values[i]); len = strlen(outputstr) + 1; /* null terminated */ pq_sendint(out, len, 4); /* length */ - appendBinaryStringInfo(out, outputstr, len); /* data */ + pq_sendstring(out, outputstr); /* data */ pfree(outputstr); -- 2.40.0