On 7/28/22 12:40, Ron wrote:
$ alias psql12
alias psql12='/usr/lib/postgresql/12/bin/psql -p5433'
This works ask expected:
$ psql12 --set num=42 -ac "\echo :num"
echo :num
42
And so does this:
$ psql12 --set num=42
psql (12.11 (Ubuntu 12.11-1.pgdg18.04+1))
Type "help" for help.
postgres=# select :num;
?column?
----------
42
(1 row)
But trying to use a variable (both with and without single quotes) in a
--command statement other than "\echo" throws a syntax error at the colon:
$ psql12 --set num=42 -ac "select :num;"
select :num;
ERROR: syntax error at or near ":"
LINE 1: select :num;
^
$ psql12 --set num=42 -ac "select :'num';"
select :'num';
ERROR: syntax error at or near ":"
LINE 1: select :'num';
^
What secret sauce am I missing to get this to work?
From here:
https://www.postgresql.org/docs/current/app-psql.html
-c command
...
Because of this behavior, putting more than one SQL command in a single
-c string often has unexpected results. It's better to use repeated -c
commands or feed multiple commands to psql's standard input, either
using echo as illustrated above, or via a shell here-document, for example:
psql <<EOF
\x
SELECT * FROM foo;
EOF
So:
echo '\set num 42 \\ SELECT :num;' | psql -d test -U aklaver
Null display is "NULL".
?column?
----------
42
or:
psql -d test -U aklaver <<EOF
> \set num 42
> SELECT :num;
> EOF
Null display is "NULL".
?column?
----------
42
(1 row)
--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx