On Sat, Dec 7, 2013 at 11:41 PM, Fabrízio de Royes Mello < fabriziome...@gmail.com> wrote: > > > On Sat, Dec 7, 2013 at 11:20 PM, Michael Paquier < michael.paqu...@gmail.com> wrote: > > > > > > IMHO is more elegant create a procedure to encapsulate the code to avoid > > > redundancy. > > Yep, perhaps something like PQsetClientEncodingIfDifferent or similar > > would make sense. > > > > Well I think at this first moment we can just create a procedure inside the dblink contrib and not touch in libpq. >
Something like the attached. 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 a91a547..1feee22 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -112,6 +112,7 @@ static Relation get_rel_from_relname(text *relname_text, LOCKMODE lockmode, AclM 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_set_client_encoding(PGconn *conn); static void dblink_res_error(const char *conname, PGresult *res, const char *dblink_context_msg, bool fail); static char *get_connect_string(const char *servername); static char *escape_param_str(const char *from); @@ -209,8 +210,7 @@ typedef struct remoteConnHashEnt errdetail_internal("%s", msg))); \ } \ dblink_security_check(conn, rconn); \ - if (PQclientEncoding(conn) != GetDatabaseEncoding()) \ - PQsetClientEncoding(conn, GetDatabaseEncodingName()); \ + dblink_set_client_encoding(conn); \ freeconn = true; \ } \ } while (0) @@ -290,8 +290,7 @@ dblink_connect(PG_FUNCTION_ARGS) dblink_security_check(conn, rconn); /* attempt to set client encoding to match server encoding, if needed */ - if (PQclientEncoding(conn) != GetDatabaseEncoding()) - PQsetClientEncoding(conn, GetDatabaseEncodingName()); + dblink_set_client_encoding(conn); if (connname) { @@ -2622,6 +2621,13 @@ dblink_security_check(PGconn *conn, remoteConn *rconn) } } +static void +dblink_set_client_encoding(PGconn *conn) +{ + if (PQclientEncoding(conn) != GetDatabaseEncoding()) + PQsetClientEncoding(conn, GetDatabaseEncodingName()); +} + /* * For non-superusers, insist that the connstr specify a password. This * prevents a password from being picked up from .pgpass, a service file,
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers