diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index c592eda..79646fd 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -3688,6 +3688,19 @@ bar
+ SERVER_VERSION_NAME
+ SERVER_VERSION_NUM
+
+
+ The server's version as a string, for example 9.6.2>, 10.1> or 11beta1>,
+ and in numeric form, for example 90602>, 100001>.
+ This is set every time you connect to a database
+ (including program start-up), but can be changed or unset.
+
+
+
+
+
SINGLELINE
@@ -3733,10 +3746,15 @@ bar
VERSION
+ VERSION_NAME
+ VERSION_NUM
- This variable is set at program start-up to
- reflect psql>'s version. It can be changed or unset.
+ These variables are set at program start-up to reflect
+ psql>'s version, respectively as a verbose string,
+ a short string (e.g., 9.6.2>, 10.1>,
+ or 11beta1>), and a number (e.g., 90602>
+ or 100001>). They can be changed or unset.
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 96f3a40..237e063 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3337,6 +3337,9 @@ checkWin32Codepage(void)
void
SyncVariables(void)
{
+ char vbuf[32];
+ const char *server_version;
+
/* get stuff from connection */
pset.encoding = PQclientEncoding(pset.db);
pset.popt.topt.encoding = pset.encoding;
@@ -3348,6 +3351,20 @@ SyncVariables(void)
SetVariable(pset.vars, "PORT", PQport(pset.db));
SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding));
+ /* this bit should match connection_warnings(): */
+ /* Try to get full text form of version, might include "devel" etc */
+ server_version = PQparameterStatus(pset.db, "server_version");
+ /* Otherwise fall back on pset.sversion for servers prior 7.4 */
+ if (!server_version)
+ {
+ formatPGVersionNumber(pset.sversion, true, vbuf, sizeof(vbuf));
+ server_version = vbuf;
+ }
+ SetVariable(pset.vars, "SERVER_VERSION_NAME", server_version);
+
+ snprintf(vbuf, sizeof(vbuf), "%d", pset.sversion);
+ SetVariable(pset.vars, "SERVER_VERSION_NUM", vbuf);
+
/* send stuff to it, too */
PQsetErrorVerbosity(pset.db, pset.verbosity);
PQsetErrorContextVisibility(pset.db, pset.show_context);
@@ -3366,6 +3383,8 @@ UnsyncVariables(void)
SetVariable(pset.vars, "HOST", NULL);
SetVariable(pset.vars, "PORT", NULL);
SetVariable(pset.vars, "ENCODING", NULL);
+ SetVariable(pset.vars, "SERVER_VERSION_NAME", NULL);
+ SetVariable(pset.vars, "SERVER_VERSION_NUM", NULL);
}
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index b3dbb59..2bef9b3 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -368,11 +368,15 @@ helpVariables(unsigned short int pager)
fprintf(output, _(" PROMPT2 specifies the prompt used when a statement continues from a previous line\n"));
fprintf(output, _(" PROMPT3 specifies the prompt used during COPY ... FROM STDIN\n"));
fprintf(output, _(" QUIET run quietly (same as -q option)\n"));
+ fprintf(output, _(" SERVER_VERSION_NAME, SERVER_VERSION_NUM\n"));
+ fprintf(output, _(" server's version (short string, numeric)\n"));
fprintf(output, _(" SHOW_CONTEXT controls display of message context fields [never, errors, always]\n"));
fprintf(output, _(" SINGLELINE end of line terminates SQL command mode (same as -S option)\n"));
fprintf(output, _(" SINGLESTEP single-step mode (same as -s option)\n"));
fprintf(output, _(" USER the currently connected database user\n"));
fprintf(output, _(" VERBOSITY controls verbosity of error reports [default, verbose, terse]\n"));
+ fprintf(output, _(" VERSION, VERSION_NAME, VERSION_NUM\n"));
+ fprintf(output, _(" psql's version (verbose string, short string, numeric)\n"));
fprintf(output, _("\nDisplay settings:\n"));
fprintf(output, _("Usage:\n"));
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 7f76797..1e48f4a 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -160,7 +160,10 @@ main(int argc, char *argv[])
EstablishVariableSpace();
+ /* Create variables showing psql version number */
SetVariable(pset.vars, "VERSION", PG_VERSION_STR);
+ SetVariable(pset.vars, "VERSION_NAME", PG_VERSION);
+ SetVariable(pset.vars, "VERSION_NUM", CppAsString2(PG_VERSION_NUM));
/* Default values for variables (that don't match the result of \unset) */
SetVariableBool(pset.vars, "AUTOCOMMIT");