Variable substitution in psql backtick expansion
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@postgreSQL.org
Date: 2017-03-30T17:33:31Z
Lists: pgsql-hackers
Awhile back in the discussion about the \if feature for psql, I'd pointed out that you shouldn't really need very much in the way of boolean-expression evaluation smarts, because you ought to be able to use a backtick shell escape: \if `expr :foo \> :bar` \echo :foo is greater than :bar \endif Now that the basic feature is in, I went to play around with this, and was disappointed to find out that it doesn't work. The reason is not far to seek: we do not do variable substitution within the text between backticks. psqlscanslash.l already foresaw that some day we'd want to do that: /* * backticked text: copy everything until next backquote, then evaluate. * * XXX Possible future behavioral change: substitute for :VARIABLE? */ I think today is that day, because it's going to make a material difference to the usability of this feature. I propose extending backtick processing so that 1. :VARIABLE is replaced by the contents of the variable 2. :'VARIABLE' is replaced by the contents of the variable, single-quoted according to Unix shell conventions. (So the processing would be a bit different from what it is for the same notation in SQL contexts.) This doesn't look like it would take very much new code to do. Thoughts? regards, tom lane
Commits
-
Add psql variables showing server version and psql version.
- a6c678f018d3 10.0 landed
- 9ae9d8c1549c 11.0 landed
-
Reformat psql's --help=variables output.
- 3955c8c4eda2 11.0 landed
-
Remove reinvention of stringify macro.
- cd6baed78150 10.0 landed
-
Allow psql variable substitution to occur in backtick command strings.
- f833c847b8fa 10.0 landed