Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

372
Views
Postgres "la columna $ 3 no existe" cuando se usan parámetros

Me encuentro con un error al intentar usar parámetros como parte de mi consulta.

Las partes notables de mi esquema son:

name_tokens tsvector

cards.rarity card_rarity que es una enumeración personalizada creada a partir de: create type card_rarity as enum ('C', 'T', 'R', 'S', 'M', 'L', 'F', 'P');

La consulta problemática es:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery("$1"::text)) AND (cards.rarity = "$2"::card_rarity) ORDER BY cards.id;

con entrada de:

 [ 'absorb & in', 'L' ]

Cuando ejecuto esto, el error dice:

UnhandledPromiseRejectionWarning: error: column "$3" does not exist .

Cuando ejecuto esta consulta sin parámetros, funciona bien, es decir:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery('absorb & in') AND (cards.rarity = 'L') ORDER BY cards.id;

Me gustaría poder utilizar parámetros, ya que lanzar cadenas de usuario directamente en una consulta puede ser peligroso.

¿Alguna idea de por qué recibo este error? Supongo que es un formato incorrecto o el uso de comillas cuando no debería o algo así. Cualquier ayuda es apreciada :)

Editar: Se sugirió que probé:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery($1::text)) AND (cards.rarity = $2::card_rarity) ORDER BY cards.id;

Pero cuando hago esto, aparece el siguiente error: UnhandledPromiseRejectionWarning: error: could not determine data type of parameter $1

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

PostgreSQL usa comillas dobles para los identificadores (como nombres de tablas y columnas), por lo que esto:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery("$1"::text)) AND (cards.rarity = "$2"::card_rarity) ORDER BY cards.id;

contiene dos identificadores entrecomillados "$1" y "$2" , pero ningún marcador de posición numerado.

Si desea utilizar marcadores de posición numerados, elimine las comillas dobles:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery($1::text)) AND (cards.rarity = $2::card_rarity) ORDER BY cards.id;

Sin embargo, no estoy seguro de dónde obtiene "$3" , supongo que el error proviene de una consulta diferente con un error de cotización similar.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!