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
.