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

Не може да се определи полиморфен тип, защото входът е с неизвестен тип

Проблемът тук е, че '' as name всъщност не указва тип за стойността. Това е unknown тип и PostgreSQL обикновено извежда истинския тип от неща като в коя колона го вмъквате или на коя функция го предавате.

В този случай го предавате на array_agg , което е полиморф функция. Може да приема входове от псевдотипа anyelement , което всъщност просто означава „разберете го по време на изпълнение“.

PostgreSQL пак щеше да го разбере с изключение на този array_to_string всъщност не приема text[] като вход. Заема anyarray - друг полиморфен тип, като anyelement за масиви.

Така че в заявката няма нищо, което да каже на PostgreSQL какъв тип е този '' е. Може да се досети, че имате предвид text , но е малко излишно за това. Така че се оплаква. Проблемът се опростява до:

regress=> SELECT array_to_string(array_agg(''), ',');
ERROR:  could not determine polymorphic type because input has type "unknown"

За да разрешите това, напишете въведен литерал:

TEXT '' AS name

или използвайте отливка:

CAST('' AS text) AS name

или стенограмата на PostgreSQL:

''::text

примери:

regress=> SELECT array_to_string(array_agg(TEXT ''), ',');
 array_to_string 
-----------------

(1 row)

regress=> SELECT array_to_string(array_agg(''::text), ',');
 array_to_string 
-----------------

(1 row)

regress=> SELECT array_to_string(array_agg(CAST('' AS text)), ',');
 array_to_string 
-----------------

(1 row)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Да дефинирате имената на таблици и колони като аргументи във функцията plpgsql?

  2. PostgreSQL, плъзнете и разменете

  3. PostgreSQL 9.5 - актуализацията не работи при обединяване на NULL с JSON

  4. Преобразувайте името на месеца в номер на месеца в PostgreSQL

  5. Външно съединяване на 3 или повече таблици в Laravel 8