Commit c3368f91 authored by Peter Eisentraut's avatar Peter Eisentraut

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>
parent e8d016d8
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "libpq-fe.h" #include "libpq-fe.h"
#include "pqexpbuffer.h" #include "pqexpbuffer.h"
#include "access/xlog.h" #include "access/xlog.h"
#include "mb/pg_wchar.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "pgstat.h" #include "pgstat.h"
#include "replication/logicalproto.h" #include "replication/logicalproto.h"
...@@ -134,9 +135,16 @@ libpqrcv_connect(const char *conninfo, bool logical, const char *appname, ...@@ -134,9 +135,16 @@ libpqrcv_connect(const char *conninfo, bool logical, const char *appname,
} }
keys[++i] = "fallback_application_name"; keys[++i] = "fallback_application_name";
vals[i] = appname; vals[i] = appname;
if (logical)
{
keys[++i] = "client_encoding";
vals[i] = GetDatabaseEncodingName();
}
keys[++i] = NULL; keys[++i] = NULL;
vals[i] = NULL; vals[i] = NULL;
Assert(i < sizeof(keys));
conn = palloc0(sizeof(WalReceiverConn)); conn = palloc0(sizeof(WalReceiverConn));
conn->streamConn = PQconnectdbParams(keys, vals, /* expand_dbname = */ true); conn->streamConn = PQconnectdbParams(keys, vals, /* expand_dbname = */ true);
if (PQstatus(conn->streamConn) != CONNECTION_OK) if (PQstatus(conn->streamConn) != CONNECTION_OK)
......
...@@ -444,7 +444,7 @@ logicalrep_write_tuple(StringInfo out, Relation rel, HeapTuple tuple) ...@@ -444,7 +444,7 @@ logicalrep_write_tuple(StringInfo out, Relation rel, HeapTuple tuple)
outputstr = OidOutputFunctionCall(typclass->typoutput, values[i]); outputstr = OidOutputFunctionCall(typclass->typoutput, values[i]);
len = strlen(outputstr) + 1; /* null terminated */ len = strlen(outputstr) + 1; /* null terminated */
pq_sendint(out, len, 4); /* length */ pq_sendint(out, len, 4); /* length */
appendBinaryStringInfo(out, outputstr, len); /* data */ pq_sendstring(out, outputstr); /* data */
pfree(outputstr); pfree(outputstr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment