Przygotowane wyciągi
Wyjaśnienie tego można znaleźć w rozdziale Stałe innych typów instrukcji :
Pogrubiony nacisk na moje.
Parametry dla przygotowanych instrukcji nie są w rzeczywistości literałami żądła ale wpisano wartości , więc nie możesz użyć formularza type 'string'
. Użyj jednej z pozostałych dwóch form, aby przerzucić wartość na inny typ, tak jak już się znalazłeś.
Przykład:
PREPARE foo AS SELECT $1::date;
EXECUTE foo('2005-1-1');
Podobne dla PQexecParams
w bibliotece libpq C
Dokumentacja:
alternatywa , jak wspomniano w powyższym cytacie, polega na przekazywaniu identyfikatorów OID odpowiednich typów danych za pomocą paramTypes[]
- jeśli rzeczywiście potrzebujesz obsady. W większości przypadków powinno działać dobrze, aby Postgres mógł pobierać typy danych z kontekstu zapytania.
Możesz uzyskać OID typów danych z katalogu systemowego pg_type
:
SELECT oid FROM pg_type WHERE typname = 'date';
Musisz użyć poprawnej nazwy typu wewnętrznego. Na przykład:int4
dla integer
.
Lub z wygodnym rzutem na regtype
:
SELECT 'date'::regtype::oid;
Jest to bardziej elastyczne, ponieważ akceptowane są również znane aliasy nazwy typu. Na przykład:int4
, int
lub integer
dla integer
.