From 96695cf17e4257c2b992df118cf5b0389ef98cf7 Mon Sep 17 00:00:00 2001
From: Craig Ringer <craig@2ndquadrant.com>
Date: Mon, 29 Aug 2016 18:37:58 +0800
Subject: [PATCH 2/2] Teach libpq to prefer server_version_num if it's sent by
 server

---
 src/interfaces/libpq/fe-exec.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index a9ba546..e7601d7 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -975,6 +975,16 @@ pqSaveParameterStatus(PGconn *conn, const char *name, const char *value)
 		conn->std_strings = (strcmp(value, "on") == 0);
 		static_std_strings = conn->std_strings;
 	}
+	else if (strcmp(name, "server_version_num") == 0)
+	{
+		int cnt,
+			ver;
+
+		cnt = sscanf(value, "%d", &ver);
+		/* failure here seems unlikely; will fall back on server_version */
+		if (cnt > 0)
+			conn->sversion = ver;
+	}
 	else if (strcmp(name, "server_version") == 0)
 	{
 		int			cnt;
@@ -982,6 +992,10 @@ pqSaveParameterStatus(PGconn *conn, const char *name, const char *value)
 					vmin,
 					vrev;
 
+		if (conn->sversion != 0)
+			/* already determined version and it can't change after connect */
+			return;
+
 		cnt = sscanf(value, "%d.%d.%d", &vmaj, &vmin, &vrev);
 
 		if (cnt == 3)
-- 
2.5.5

