Re: Variable substitution in psql backtick expansion - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: Variable substitution in psql backtick expansion
Date
Msg-id CAFj8pRACH1M=egydH4dAAoo9rRVTkuYCaoyZQK2Yf4BTQuRM5w@mail.gmail.com
Whole thread Raw
In response to Re: Variable substitution in psql backtick expansion  (Fabien COELHO <coelho@cri.ensmp.fr>)
Responses Re: Variable substitution in psql backtick expansion  (Corey Huinker <corey.huinker@gmail.com>)
List pgsql-hackers


2017-04-02 13:13 GMT+02:00 Fabien COELHO <coelho@cri.ensmp.fr>:

Hello Pavel,

  \echo :VERSION
  PostgreSQL 10devel on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu
5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609, 64-bit

Probably some :VERSION_NUM would make some sense. See attached PoC patch.
Would it make sense?

Maybe better name for you CLIENT_VERSION_NUM

If it was starting from nothing I would tend to agree with you, but there is already an existing :VERSION variable, so it seemed logical to keep on and create variants with the same prefix.

you have true - so VERSION_NUM should be client side version
 


Can be SERVER_VERSION_NUM taken from connection info?

Probably it could. It seems a little less straightforward than defining a client-side string at compile time. The information is displayed when the connection is established, so the information is there somewhere.

It is not too hard

diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 94a3cfce90..d1ae81646f 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3320,16 +3320,21 @@ checkWin32Codepage(void)
 void
 SyncVariables(void)
 {
+   char        buffer[100];
+
    /* get stuff from connection */
    pset.encoding = PQclientEncoding(pset.db);
    pset.popt.topt.encoding = pset.encoding;
    pset.sversion = PQserverVersion(pset.db);
 
+   snprintf(buffer, 100, "%d", pset.sversion);
+
    SetVariable(pset.vars, "DBNAME", PQdb(pset.db));
    SetVariable(pset.vars, "USER", PQuser(pset.db));
    SetVariable(pset.vars, "HOST", PQhost(pset.db));
    SetVariable(pset.vars, "PORT", PQport(pset.db));
    SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding));
+   SetVariable(pset.vars, "SVERSION_NUM", buffer);
 
    /* send stuff to it, too */
    PQsetErrorVerbosity(pset.db, pset.verbosity);

Regards

Pavel
 

 psql (10devel, server 9.6.2)

--
Fabien.

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Moving GiST index constant to parameter
Next
From: Tom Lane
Date:
Subject: Re: Suggested fix for \p and \r in psql