PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Errore di sintassi PostgreSQL nella query parametrizzata alla data $1

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 .