PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Błąd składni PostgreSQL w sparametryzowanym zapytaniu w dniu $1

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przyspieszyć liczenie wierszy w tabeli PostgreSQL?

  2. 100% wykorzystanie procesora spowodowane przez nieznane zapytanie postgres

  3. Konwersja liczby całkowitej na Enum w PostgreSQL

  4. Pobieram COUNT z sqlalchemy

  5. Narzędzie do tłumaczenia Oracle PL/SQL na Postgresql PL/pgSQL