PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Syntaxfehler in parametrisierter Abfrage am Datum $1

Vorbereitete Anweisungen

Die Erklärung dafür finden Sie unter im Kapitel Konstanten anderer Typen des Handbuchs :

Fettdruck von mir.

Parameter für vorbereitete Anweisungen sind eigentlich keine Sting-Literale aber typisierte Werte , Sie können also nicht die Form type 'string' verwenden . Verwenden Sie eine der beiden anderen Formen, um den Wert in einen anderen Typ umzuwandeln, wie Sie ihn bereits gefunden haben.

Beispiel:

PREPARE foo AS SELECT $1::date;

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

Ähnlich für PQexecParams in der libpq C-Bibliothek

Die Dokumentation:

Die Alternative , wie im obigen Zitat erwähnt, besteht darin, die OIDs der jeweiligen Datentypen mit paramTypes[] zu übergeben - wenn Sie die Besetzung wirklich brauchen. In den meisten Fällen sollte es problemlos funktionieren, Postgres Datentypen aus dem Abfragekontext ableiten zu lassen.

Sie können die OID von Datentypen aus dem Systemkatalog abrufen pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

Sie müssen den richtigen internen Typnamen verwenden. Zum Beispiel:int4 für integer .
Oder mit einer bequemen Umwandlung in regtype :

SELECT 'date'::regtype::oid;

Dies ist flexibler, da bekannte Aliase für den Typnamen ebenfalls akzeptiert werden. Zum Beispiel:int4 , int oder integer für integer .