On Fri, Dec 6, 2013 at 1:05 AM, Joe Conway <m...@joeconway.com> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 12/05/2013 06:53 PM, Tom Lane wrote:
> > I seem to remember that at some point we realized that the encoding
> > ID assignments are part of libpq's ABI and so can't practically be
> > changed ever, so the above may be moot.  Even so, I think it's a
> > bad idea to be depending on pg_encoding_to_char() here, given the
> > ambiguity in what it references.  It would be unsurprising to get
> > build-time or run-time failures on pickier platforms, as a
> > consequence of that ambiguity.  So I'd still recommend comparing
> > integer IDs as above, rather than this.
>
> Great feedback as always -- thanks! Will make that change.
>
>
Hi Joe, how are you?

Well, when Tom sent this email I was reviewing your patch and the main
suggestion is about use of 'pg_encoding_to_char' too... ;-)

The attached patch with my review!

Regards,

-- 
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL
>> Timbira: http://www.timbira.com.br
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>> Twitter: http://twitter.com/fabriziomello
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
  */
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to