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
.