Dichiarazioni preparate
La spiegazione di ciò può essere trovata nel capitolo Costanti di altri tipi del manuale :
Enfasi in grassetto la mia.
I parametri per le istruzioni preparate non sono in realtà letterali sting ma digitato valori , quindi non puoi utilizzare il modulo type 'string'
. Usa uno degli altri due moduli per trasmettere il valore a un tipo diverso, come se avessi già trovato te stesso.
Esempio:
PREPARE foo AS SELECT $1::date;
EXECUTE foo('2005-1-1');
Simile per PQexecParams
nella libreria C libpq
La documentazione:
L'alternativa , come menzionato nella citazione sopra, consiste nel trasmettere gli OID dei rispettivi tipi di dati con paramTypes[]
- se hai davvero bisogno del cast. Nella maggior parte dei casi dovrebbe funzionare perfettamente per consentire a Postgres di derivare i tipi di dati dal contesto della query.
È possibile ottenere l'OID dei tipi di dati dal catalogo di sistema pg_type
:
SELECT oid FROM pg_type WHERE typname = 'date';
È necessario utilizzare il nome del tipo interno corretto. Ad esempio:int4
per integer
.
O con un cast di convenienza su regtype
:
SELECT 'date'::regtype::oid;
Questo è più flessibile poiché vengono accettati anche gli alias noti per il nome del tipo. Ad esempio:int4
, int
o integer
per integer
.