summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Conway <mail@joeconway.com>2013-12-07 17:00:10 -0800
committerJoe Conway <mail@joeconway.com>2013-12-07 17:00:10 -0800
commit0ec530625f1cc0a17d975f925fed5d3ab469c6f8 (patch)
treeb3cb06d190062232822a9a9ef408efa327b05f3a
parent2dcc48c35af5305fba0d8cb5e31fa0c25f52d13f (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 e617f9b399d..9fe750e993d 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -209,7 +209,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)
@@ -288,8 +289,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)
{