Thread: Syntax error when combining --set and --command has me stumped

$ 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?

-- 
Angular momentum makes the world go 'round.



Re: Syntax error when combining --set and --command has me stumped

From
"David G. Johnston"
Date:
On Thu, Jul 28, 2022 at 12:40 PM Ron <ronljohnsonjr@gmail.com> wrote:
What secret sauce am I missing to get this to work?

Given that the documentation says:

"command must be either a command string that is completely parsable by the server (i.e., it contains no psql-specific features), or a single backslash command."

I don't see how you can do anything to make that work.

David J.

On 7/28/22 14:47, David G. Johnston wrote:
On Thu, Jul 28, 2022 at 12:40 PM Ron <ronljohnsonjr@gmail.com> wrote:
What secret sauce am I missing to get this to work?

Given that the documentation says:

"command must be either a command string that is completely parsable by the server (i.e., it contains no psql-specific features), or a single backslash command."

And all this time, I was looking in the --set=assignment section of the psql doc page...

https://www.postgresql.org/docs/12/app-psql.html


I don't see how you can do anything to make that work.

David J.


--
Angular momentum makes the world go 'round.

Re: Syntax error when combining --set and --command has me stumped

From
Adrian Klaver
Date:
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@aklaver.com



Re: Syntax error when combining --set and --command has me stumped

From
Gianni Ceccarelli
Date:
If you can use bash, or set up some redirections from whatever you're
using to execute ``psql``, you can do::

  $ psql somedb --set num=42 <<<'select :num'
  Timing is on.
  Expanded display is used automatically.
  Line style is unicode.
  Border style is 2.
  ┌──────────┐
  │ ?column? │
  ├──────────┤
  │       42 │
  └──────────┘
  (1 row)

  Time: 0.517 ms

or (more classically)::

  echo 'select :num' | psql somedb --set num=42

--
    Dakkar - <Mobilis in mobile>
    GPG public key fingerprint = A071 E618 DD2C 5901 9574
                                 6FE2 40EA 9883 7519 3F88
                        key id = 0x75193F88




On 7/29/22 04:05, Gianni Ceccarelli wrote:
> If you can use bash, or set up some redirections from whatever you're
> using to execute ``psql``, you can do::
>
>    $ psql somedb --set num=42 <<<'select :num'
>    Timing is on.
>    Expanded display is used automatically.
>    Line style is unicode.
>    Border style is 2.
>    ┌──────────┐
>    │ ?column? │
>    ├──────────┤
>    │       42 │
>    └──────────┘
>    (1 row)
>
>    Time: 0.517 ms
>
> or (more classically)::
>
>    echo 'select :num' | psql somedb --set num=42

Since my process uses the same variable in multiple bash statements, I 
decided to use a bash environment variable.

-- 
Angular momentum makes the world go 'round.