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

Error de sintaxis de PostgreSQL en la consulta parametrizada en la fecha $ 1

Declaraciones preparadas

La explicación de esto se puede encontrar en el capítulo Constantes de otros tipos del manual :

Énfasis en negrita mío.

Los parámetros para sentencias preparadas no son en realidad literales de picadura pero escribió valores , por lo que no puede usar el formulario type 'string' . Use una de las otras dos formas para convertir el valor a un tipo diferente, como ya lo encontró.

Ejemplo:

PREPARE foo AS SELECT $1::date;

EXECUTE foo('2005-1-1');

Similar para PQexecParams en la biblioteca libpq C

La documentación:

La alternativa , como se menciona en la cita anterior, es pasar los OID de los respectivos tipos de datos con paramTypes[] - si realmente necesitas el yeso. En la mayoría de los casos, debería funcionar bien permitir que Postgres derive tipos de datos del contexto de la consulta.

Puede obtener el OID de los tipos de datos del catálogo del sistema pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

Debe utilizar el nombre de tipo interno correcto. Por ejemplo:int4 para integer .
O con una conversión conveniente a regtype :

SELECT 'date'::regtype::oid;

Esto es más flexible ya que también se aceptan alias conocidos para el nombre del tipo. Por ejemplo:int4 , int o integer para integer .