sql >> Database teknologi >  >> RDS >> PostgreSQL

Kunne ikke bestemme polymorf type, fordi input har type ukendt

Problemet her er, at '' as name angiver faktisk ikke en type for værdien. Det er den unknown type, og PostgreSQL udleder normalt den rigtige type fra ting som hvilken kolonne du indsætter den i, eller hvilken funktion du sender den til.

I dette tilfælde sender du det til array_agg , som er en polymorphc fungere. Det kan tage input af pseudo-typen anyelement , hvilket egentlig bare betyder "find ud af det under kørsel".

PostgreSQL ville stadig finde ud af det bortset fra array_to_string tager faktisk ikke en text[] som input. Det kræver anyarray - en anden polymorf type, såsom anyelement for arrays.

Så der er intet i forespørgslen til at fortælle PostgreSQL, hvilken type den '' er. Det kunne gætte, at du mente text , men det er lidt for nøjeregnende til det. Så det brokker sig. Problemet forenkler ned til:

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

For at løse dette, skriv et skrevet bogstav:

TEXT '' AS name

eller brug en rollebesætning:

CAST('' AS text) AS name

eller PostgreSQL-stenografien:

''::text

eksempler:

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. SELECT-forespørgsel med bogstavelige tegn (kolon, semikolon) i Oracle

  2. Oracle Transparent Data Encryption udekrypteret adgang

  3. Hvordan indsætter jeg en række værdier i forskellige kolonner i en mysql-tabel?

  4. sqldeveloper udsender korrekt resultat for count(*), mens sqlplus giver nul