diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index 2cc7c8fefa13956674daee0a2e59a4b2cb1bbaf0..10a347fe5fbc48595ebe977b903e8eb1a13d97ad 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -201,7 +201,8 @@ typedef struct remoteConnHashEnt errdetail_internal("%s", msg))); \ } \ dblink_security_check(conn, rconn); \ - PQsetClientEncoding(conn, GetDatabaseEncodingName()); \ + if (PQclientEncoding(conn) != GetDatabaseEncoding()) \ + PQsetClientEncoding(conn, GetDatabaseEncodingName()); \ freeconn = true; \ } \ } while (0) @@ -280,8 +281,9 @@ dblink_connect(PG_FUNCTION_ARGS) /* check password actually used if not superuser */ dblink_security_check(conn, rconn); - /* attempt to set client encoding to match server encoding */ - PQsetClientEncoding(conn, GetDatabaseEncodingName()); + /* attempt to set client encoding to match server encoding, if needed */ + if (PQclientEncoding(conn) != GetDatabaseEncoding()) + PQsetClientEncoding(conn, GetDatabaseEncodingName()); if (connname) {