2017-08-26 8:54 GMT+02:00 Fabien COELHO <coe...@cri.ensmp.fr>: > > Hello, > > As a follow-up to the \if patch by Corey Huinker, here is a proposal to > allow testing whether a client-side variable exists in psql. > > The syntax is as ugly as the current :'var' and :"var" things, but ISTM > that this is the only simple option to have a working SQL-compatible syntax > with both client-side substitution and server side execution. See the > second example below. >
It is really ugly - the ? symbol is not used in pair usually - so it is much more visible - it is bad readable. Maybe some other syntax: :{fx xxx} .. where fx can be one from more possible operators ? ! ... > > -- client side use > psql> \set i 1 > psql> \if :?i? > psql> \echo 'i is defined' > psql> \endif > -- use server-side in an SQL expression > psql> SELECT NOT :?VERSION_NUM? OR :'VERSION' <> VERSTION() AS bad_conf > \gset > > psql> \if :bad_conf \echo 'too bad...' \quit \endif > > The other option would be to have some special keyword syntax, say > "defined var", but then it would have to be parsed client side, and how to > do that in an SQL expression is unclear, and moreover it would not look > right in an SQL expression. If it would look like a function call, say > "defined('var')", it would potentially interact with existing server-side > user-defined functions, which is pretty undesirable. Hence the :?...? > proposal above which is limited to variable subsitution syntax. should not be solved by introduction \ifdef ? > > -- > Fabien. > > -- > Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-hackers > >