Проблемът тук е, че '' 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)