Check psql parameter is passed, if not ask for it

Started by Wiwwo Staffover 1 year ago2 messagesgeneral
Jump to latest
#1Wiwwo Staff
wiwwo@wiwwo.com

Hi!
I want to check if I pass the parameter "param1" to a sql script
"delme.sql" like
```
\if ':param1'
\echo :param1;
\else
\prompt 'Param1? ' :param1
\endif
select :'param1';
```
if parameter `param1` is not passed, the .sql should ask for it.

If I run something like
`psql -f delme.sql -v param1=1`
it works, but if i pass
`psql -f delme.sql -v param1=meh`
i receive
`psql:delme.sql:1: error: unrecognized value ":param1" for "\if
expression": Boolean expected`

How can I implement that?
TIA, Wiwwo

#2Torsten Förtsch
tfoertsch123@gmail.com
In reply to: Wiwwo Staff (#1)
Re: Check psql parameter is passed, if not ask for it

to quote the documentation:

If an unquoted colon (:) followed by a psql variable name appears within

an argument, it is replaced by the variable's value, as described in SQL
Interpolation below.

The forms :'variable_name' and :"variable_name" described there work as

well. The :{?variable_name} syntax allows testing whether a variable is
defined. It is

substituted by TRUE or FALSE. Escaping the colon with a backslash

protects it from substitution.

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

On Mon, Aug 5, 2024 at 8:46 PM Wiwwo Staff <wiwwo@wiwwo.com> wrote:

Show quoted text

Hi!
I want to check if I pass the parameter "param1" to a sql script
"delme.sql" like
```
\if ':param1'
\echo :param1;
\else
\prompt 'Param1? ' :param1
\endif
select :'param1';
```
if parameter `param1` is not passed, the .sql should ask for it.

If I run something like
`psql -f delme.sql -v param1=1`
it works, but if i pass
`psql -f delme.sql -v param1=meh`
i receive
`psql:delme.sql:1: error: unrecognized value ":param1" for "\if
expression": Boolean expected`

How can I implement that?
TIA, Wiwwo