PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Erreur de syntaxe PostgreSQL dans la requête paramétrée à la date $1

Déclarations préparées

L'explication de ceci peut être trouvée dans le chapitre Constantes d'autres types du manuel :

J'insiste sur moi.

Les paramètres des instructions préparées ne sont pas réellement des littéraux sting mais tapé des valeurs , vous ne pouvez donc pas utiliser la forme type 'string' . Utilisez l'une des deux autres formes pour convertir la valeur en un type différent, comme si vous vous étiez déjà trouvé.

Exemple :

PREPARE foo AS SELECT $1::date;

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

Similaire pour PQexecParams dans la bibliothèque C libpq

La documentation :

L'alternative , comme mentionné dans la citation ci-dessus, consiste à transmettre les OID des types de données respectifs avec paramTypes[] - Si vous avez réellement besoin du casting. Dans la plupart des cas, cela devrait fonctionner correctement de laisser Postgres dériver des types de données à partir du contexte de la requête.

Vous pouvez obtenir l'OID des types de données à partir du catalogue système pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

Vous devez utiliser le nom de type interne correct. Par exemple :int4 pour integer .
Ou avec un cast pratique vers regtype :

SELECT 'date'::regtype::oid;

Ceci est plus flexible car les alias connus pour le nom du type sont également acceptés. Par exemple :int4 , integer ou integer pour integer .