PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Usando o parâmetro posicional ($1,..) no psql


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.