summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Conway2013-12-08 00:59:16 +0000
committerJoe Conway2013-12-08 00:59:16 +0000
commit70165f25bce611ae08b7b69e8779fd6fbe3a36ee (patch)
tree7988de22ae9cb1a47a5684a0233873dbc483b61c
parentad910ccdc70da627f51f9f81cd095f3ac2ffe2e5 (diff)
Fix performance regression in dblink connection speed.
Previous commit e5de601267d98c5d60df6de8d436685c7105d149 modified dblink to ensure client encoding matched the server. However the added PQsetClientEncoding() call added significant overhead. Restore original performance in the common case where client encoding already matches server encoding by doing nothing in that case. Applies to all active branches. Issue reported and work sponsored by Zonar Systems.
-rw-r--r--contrib/dblink/dblink.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index 5a7bf22304f..98316a93185 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -192,7 +192,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)
@@ -271,8 +272,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)
{