sql >> Base de Datos >  >> RDS >> PostgreSQL

Usando el parámetro posicional ($1,..) en psql

Podría usar variables psql . Esos están interpolados en código SQL. Por documentación:

Tenga en cuenta que (según la documentación ):

Por lo tanto, no puede trabajar con parámetros posicionales de la forma $1 . Supongo que usted copia estos fragmentos de código de los cuerpos de las funciones, ¿y esa es la razón de los parámetros posicionales?
Desde PostgreSQL 9.2, incluso las funciones SQL pueden hacer referencia a los parámetros por su nombre. Por documentación:

Las funciones PL/pgSQL admiten parámetros con nombre en el cuerpo de la función desde la versión 8.0.

Mi convención de nomenclatura preferida es anteponer los parámetros de función con _ para evitar conflictos de nombres. Pero eso es cuestión de gustos y estilo.

Solo la mitad de una solución

Entonces, tu ejemplo podría funcionar así:

db=> \set _name 'troy'
db=> \set _email '[email protected]'
db=> select * from users where name=:'_name' and email=:'_email'; 

Todavía tiene que preparar las cadenas de consulta...
Observe las comillas en :'_name' . Eso tiene el mismo efecto que aplicar quote_literal() en la cuerda Detalles en el manual.