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
.