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

Nie można określić typu polimorficznego, ponieważ dane wejściowe mają nieznany typ

Problem polega na tym, że '' as name w rzeczywistości nie określa typu wartości. To unknown type, a PostgreSQL zwykle wywnioskuje rzeczywisty typ z takich rzeczy, jak kolumna, do której go wstawiasz lub funkcja, do której go przekazujesz.

W takim przypadku przekazujesz go do array_agg , który jest polimorfem funkcjonować. Może pobierać dane wejściowe pseudotypu anyelement , co tak naprawdę oznacza „rozwiąż to w czasie wykonywania”.

PostgreSQL nadal to rozgryzie, z wyjątkiem tego, że array_to_string w rzeczywistości nie przyjmuje text[] jako wejście. Zajmuje anyarray - inny typ polimorficzny, jak anyelement dla tablic.

Więc w zapytaniu nie ma nic, co mogłoby powiedzieć PostgreSQL, jakiego typu jest ten '' jest. Może zgadnąć, że chodziło Ci o text , ale to trochę zbyt wybredne. Więc narzeka. Problem upraszcza się do:

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

Aby rozwiązać ten problem, napisz wpisany literał:

TEXT '' AS name

lub użyj rzutu:

CAST('' AS text) AS name

lub skrót PostgreSQL:

''::text

przykłady:

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. Konsola Rails - Znajdź miejsce utworzenia o =pewnego dnia

  2. PostgreSQL round (v numeryczne, s int)

  3. Co sprawdzić, jeśli wykorzystanie pamięci PostgreSQL jest wysokie?

  4. Postgresql - Jak przyspieszyć aktualizację ogromnej tabeli (100 milionów wierszy)?

  5. Znak z kodowaniem UTF8 nie ma odpowiednika w WIN1252