aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2017-02-23 11:27:59 -0500
committerPeter Eisentraut <peter_e@gmx.net>2017-02-23 11:29:12 -0500
commitc3368f9173c13e2e293df91f75f1a5c565c4ca18 (patch)
tree1ad8aae50b1b95d55f2f9068760bf5e5f100b360 /src
parente8d016d81940e75c126aa52971b7903b7301002e (diff)
downloadpostgresql-c3368f9173c13e2e293df91f75f1a5c565c4ca18.tar.gz
postgresql-c3368f9173c13e2e293df91f75f1a5c565c4ca18.zip
Fix logical replication with different encodings
reported by Shinoda, Noriyoshi <noriyoshi.shinoda@hpe.com>; partial patch by Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/libpqwalreceiver/libpqwalreceiver.c8
-rw-r--r--src/backend/replication/logical/proto.c2
2 files changed, 9 insertions, 1 deletions
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 44a89c73fde..44ded74f519 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 142cd993cd8..bc6e9b5a98c 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);