sql >> Databáze >  >> RDS >> PostgreSQL

Nelze určit polymorfní typ, protože vstup má neznámý typ

Problém je v tom, že '' as name ve skutečnosti neurčuje typ hodnoty. Je to unknown type a PostgreSQL obvykle odvozuje skutečný typ z věcí, jako je to, do kterého sloupce jej vkládáte nebo do jaké funkce jej předáváte.

V tomto případě jej předáte array_agg , což je polymorfc funkce. Může přijímat vstupy pseudotypu anyelement , což ve skutečnosti znamená pouze „přijděte na to za běhu“.

PostgreSQL by na to stále přišel kromě toho array_to_string ve skutečnosti nebere text[] jako vstup. Vyžaduje to anyarray - jiný polymorfní typ, jako anyelement pro pole.

V dotazu tedy není nic, co by PostgreSQL sdělovalo, jaký typ '' je. Mohlo by to hádat, že máte na mysli text , ale na to je to trochu moc náročné. Takže si stěžuje. Problém se zjednodušuje na:

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

Chcete-li to vyřešit, napište napsaný literál:

TEXT '' AS name

nebo použijte obsazení:

CAST('' AS text) AS name

nebo zkratka PostgreSQL:

''::text

příklady:

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. Ověření hesla se nezdaří se složitým heslem

  2. Jak získat včerejší datum v Oracle

  3. Jak mohu Sequel Pro s PuPHPet?

  4. sql získat celkový a filtrovaný počet v jednom dotazu