diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index d68b12a..c358734 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -99,6 +99,7 @@ static char *generate_relation_name(Relation rel); static void dblink_connstr_check(const char *connstr); static void dblink_security_check(PGconn *conn, remoteConn *rconn); static void dblink_res_error(const char *conname, PGresult *res, const char *dblink_context_msg, bool fail); +static void dblink_set_client_encoding(PGconn *conn); static char *get_connect_string(const char *servername); static char *escape_param_str(const char *from); static void validate_pkattnums(Relation rel, @@ -190,7 +191,7 @@ typedef struct remoteConnHashEnt errdetail("%s", msg))); \ } \ dblink_security_check(conn, rconn); \ - PQsetClientEncoding(conn, GetDatabaseEncodingName()); \ + dblink_set_client_encoding(conn); \ freeconn = true; \ } \ } while (0) @@ -270,7 +271,7 @@ dblink_connect(PG_FUNCTION_ARGS) dblink_security_check(conn, rconn); /* attempt to set client encoding to match server encoding */ - PQsetClientEncoding(conn, GetDatabaseEncodingName()); + dblink_set_client_encoding(conn); if (connname) { @@ -2328,6 +2329,13 @@ dblink_res_error(const char *conname, PGresult *res, const char *dblink_context_ dblink_context_conname, dblink_context_msg))); } +static void +dblink_set_client_encoding(PGconn *conn) +{ + if (PQclientEncoding(conn) != GetDatabaseEncoding()) + PQsetClientEncoding(conn, GetDatabaseEncodingName()); +} + /* * Obtain connection string for a foreign server */