Você pode usar variáveis psql . Esses são interpolados no código SQL. Por documentação:
Observe que (por documentação ):
Portanto, você não pode trabalhar com parâmetros posicionais no formato
$1
. Eu estou supondo que você copie esses pedaços de código de corpos de função, e essa é a razão para os parâmetros posicionais?Desde o PostgreSQL 9.2, até mesmo funções SQL podem referenciar parâmetros por nome. Por documentação:
As funções PL/pgSQL suportam parâmetros nomeados no corpo da função desde a v8.0.
Minha convenção de nomenclatura preferida é preceder os parâmetros da função com
_
para evitar conflitos de nomenclatura. Mas isso é uma questão de gosto e estilo. Somente meia solução
Então, seu exemplo poderia funcionar assim:
db=> \set _name 'troy'
db=> \set _email '[email protected]'
db=> select * from users where name=:'_name' and email=:'_email';
Você ainda precisa preparar as strings de consulta ...
Observe as aspas em
:'_name'
. Isso tem o mesmo efeito que aplicar quote_literal()
na corda. Detalhes no manual.