diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index c592eda..a693fb9 100644
*** a/doc/src/sgml/ref/psql-ref.sgml
--- b/doc/src/sgml/ref/psql-ref.sgml
*************** bar
*** 3688,3693 ****
--- 3688,3717 ----
        </varlistentry>
  
        <varlistentry>
+         <term><varname>SERVER_VERSION_NAME</varname></term>
+         <listitem>
+         <para>
+         The server's version number as a string, for
+         example <literal>9.6.2</>, <literal>10.1</>, or <literal>11beta1</>.
+         This is set every time you connect to a database (including
+         program start-up), but can be changed or unset.
+         </para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+         <term><varname>SERVER_VERSION_NUM</varname></term>
+         <listitem>
+         <para>
+         The server's version number in numeric form, for
+         example <literal>90602</> or <literal>100001</>.
+         This is set every time you connect to a database (including
+         program start-up), but can be changed or unset.
+         </para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
          <term><varname>SINGLELINE</varname></term>
          <listitem>
          <para>
*************** bar
*** 3733,3742 ****
  
        <varlistentry>
          <term><varname>VERSION</varname></term>
          <listitem>
          <para>
!         This variable is set at program start-up to
!         reflect <application>psql</>'s version.  It can be changed or unset.
          </para>
          </listitem>
        </varlistentry>
--- 3757,3771 ----
  
        <varlistentry>
          <term><varname>VERSION</varname></term>
+         <term><varname>VERSION_NAME</varname></term>
+         <term><varname>VERSION_NUM</varname></term>
          <listitem>
          <para>
!         These variables are set at program start-up to reflect
!         <application>psql</>'s version, respectively as a verbose string,
!         a short string (e.g., <literal>9.6.2</>, <literal>10.1</>,
!         or <literal>11beta1</>), and a number (e.g., <literal>90602</>
!         or <literal>100001</>).  They can be changed or unset.
          </para>
          </listitem>
        </varlistentry>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 96f3a40..4283bf3 100644
*** a/src/bin/psql/command.c
--- b/src/bin/psql/command.c
*************** checkWin32Codepage(void)
*** 3337,3342 ****
--- 3337,3345 ----
  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;
*************** SyncVariables(void)
*** 3348,3353 ****
--- 3351,3370 ----
  	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 */
+ 	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);
*************** UnsyncVariables(void)
*** 3366,3371 ****
--- 3383,3390 ----
  	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..ee612b0 100644
*** a/src/bin/psql/help.c
--- b/src/bin/psql/help.c
*************** helpVariables(unsigned short int pager)
*** 336,342 ****
  	 * Windows builds currently print one more line than non-Windows builds.
  	 * Using the larger number is fine.
  	 */
! 	output = PageOutput(88, pager ? &(pset.popt.topt) : NULL);
  
  	fprintf(output, _("List of specially treated variables\n\n"));
  
--- 336,342 ----
  	 * Windows builds currently print one more line than non-Windows builds.
  	 * Using the larger number is fine.
  	 */
! 	output = PageOutput(93, pager ? &(pset.popt.topt) : NULL);
  
  	fprintf(output, _("List of specially treated variables\n\n"));
  
*************** helpVariables(unsigned short int pager)
*** 344,378 ****
  	fprintf(output, _("Usage:\n"));
  	fprintf(output, _("  psql --set=NAME=VALUE\n  or \\set NAME VALUE inside psql\n\n"));
  
! 	fprintf(output, _("  AUTOCOMMIT         if set, successful SQL commands are automatically committed\n"));
! 	fprintf(output, _("  COMP_KEYWORD_CASE  determines the case used to complete SQL key words\n"
! 					  "                     [lower, upper, preserve-lower, preserve-upper]\n"));
! 	fprintf(output, _("  DBNAME             the currently connected database name\n"));
! 	fprintf(output, _("  ECHO               controls what input is written to standard output\n"
! 					  "                     [all, errors, none, queries]\n"));
! 	fprintf(output, _("  ECHO_HIDDEN        if set, display internal queries executed by backslash commands;\n"
! 					  "                     if set to \"noexec\", just show without execution\n"));
! 	fprintf(output, _("  ENCODING           current client character set encoding\n"));
! 	fprintf(output, _("  FETCH_COUNT        the number of result rows to fetch and display at a time\n"
! 					  "                     (default: 0=unlimited)\n"));
! 	fprintf(output, _("  HISTCONTROL        controls command history [ignorespace, ignoredups, ignoreboth]\n"));
! 	fprintf(output, _("  HISTFILE           file name used to store the command history\n"));
! 	fprintf(output, _("  HISTSIZE           max number of commands to store in the command history\n"));
! 	fprintf(output, _("  HOST               the currently connected database server host\n"));
! 	fprintf(output, _("  IGNOREEOF          number of EOFs needed to terminate an interactive session\n"));
! 	fprintf(output, _("  LASTOID            value of the last affected OID\n"));
! 	fprintf(output, _("  ON_ERROR_ROLLBACK  if set, an error doesn't stop a transaction (uses implicit savepoints)\n"));
! 	fprintf(output, _("  ON_ERROR_STOP      stop batch execution after error\n"));
! 	fprintf(output, _("  PORT               server port of the current connection\n"));
! 	fprintf(output, _("  PROMPT1            specifies the standard psql prompt\n"));
! 	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, _("  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, _("\nDisplay settings:\n"));
  	fprintf(output, _("Usage:\n"));
--- 344,383 ----
  	fprintf(output, _("Usage:\n"));
  	fprintf(output, _("  psql --set=NAME=VALUE\n  or \\set NAME VALUE inside psql\n\n"));
  
! 	fprintf(output, _("  AUTOCOMMIT          if set, successful SQL commands are automatically committed\n"));
! 	fprintf(output, _("  COMP_KEYWORD_CASE   determines the case used to complete SQL key words\n"
! 					  "                      [lower, upper, preserve-lower, preserve-upper]\n"));
! 	fprintf(output, _("  DBNAME              the currently connected database name\n"));
! 	fprintf(output, _("  ECHO                controls what input is written to standard output\n"
! 					  "                      [all, errors, none, queries]\n"));
! 	fprintf(output, _("  ECHO_HIDDEN         if set, display internal queries executed by backslash commands;\n"
! 					  "                      if set to \"noexec\", just show without execution\n"));
! 	fprintf(output, _("  ENCODING            current client character set encoding\n"));
! 	fprintf(output, _("  FETCH_COUNT         the number of result rows to fetch and display at a time\n"
! 					  "                      (default: 0=unlimited)\n"));
! 	fprintf(output, _("  HISTCONTROL         controls command history [ignorespace, ignoredups, ignoreboth]\n"));
! 	fprintf(output, _("  HISTFILE            file name used to store the command history\n"));
! 	fprintf(output, _("  HISTSIZE            max number of commands to store in the command history\n"));
! 	fprintf(output, _("  HOST                the currently connected database server host\n"));
! 	fprintf(output, _("  IGNOREEOF           number of EOFs needed to terminate an interactive session\n"));
! 	fprintf(output, _("  LASTOID             value of the last affected OID\n"));
! 	fprintf(output, _("  ON_ERROR_ROLLBACK   if set, an error doesn't stop a transaction (uses implicit savepoints)\n"));
! 	fprintf(output, _("  ON_ERROR_STOP       stop batch execution after error\n"));
! 	fprintf(output, _("  PORT                server port of the current connection\n"));
! 	fprintf(output, _("  PROMPT1             specifies the standard psql prompt\n"));
! 	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's version (short string)\n"));
! 	fprintf(output, _("  SERVER_VERSION_NUM  server's version (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             psql's version (verbose string)\n"));
! 	fprintf(output, _("  VERSION_NAME        psql's version (short string)\n"));
! 	fprintf(output, _("  VERSION_NUM         psql's version (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
*************** main(int argc, char *argv[])
*** 160,166 ****
--- 160,169 ----
  
  	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");
