PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Синтактична грешка на PostgreSQL в параметризирана заявка на дата $1

Подготвени отчети

Обяснението за това може да се намери в главата Константи от други типове от ръководството :

Удебелен акцент е мой.

Параметрите за подготвени изрази всъщност не са литерали на ужилване но въведени стойности , така че не можете да използвате формата type 'string' . Използвайте един от другите два формуляра, за да прехвърлите стойността към различен тип, както вече сте се открили.

Пример:

PREPARE foo AS SELECT $1::date;

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

Подобно за PQexecParams в библиотеката libpq C

Документацията:

Алтернативата , както е споменато в цитата по-горе, е да предава OID на съответните типове данни с paramTypes[] - ако наистина имате нужда от актьорския състав. В повечето случаи трябва да работи добре, за да позволи на Postgres да извлича типове данни от контекста на заявката.

Можете да получите OID на типовете данни от системния каталог pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

Трябва да използвате правилното име на вътрешен тип. Например:int4 за integer .
Или с удобно прехвърляне към regtype :

SELECT 'date'::regtype::oid;

Това е по-гъвкаво, тъй като се приемат и известни псевдоними за името на типа. Например:int4 , int или integer за 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. Изберете клетки от ред като нови колони

  2. Как да наследя привилегиите на дадена роля?

  3. PostgreSQL - Потребителят на DB трябва да има право само да извиква функции

  4. Cloud9 постгрес

  5. Запишете рамка с данни на spark в базата данни на postgres