PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Não foi possível determinar o tipo polimórfico porque a entrada tem tipo desconhecido


O problema aqui é que '' as name na verdade não especifica um tipo para o valor. É o unknown type, e o PostgreSQL geralmente infere o tipo real de coisas como em qual coluna você está inserindo ou para qual função você o passa.

Nesse caso, você o passa para array_agg , que é um polimorfo função. Pode receber entradas do pseudo-tipo anyelement , que realmente significa apenas "descobrir em tempo de execução".

PostgreSQL ainda descobriria, exceto que array_to_string na verdade não recebe um text[] como entrada. Leva anyarray - outro tipo polimórfico, como anyelement para matrizes.

Portanto, não há nada na consulta para dizer ao PostgreSQL que tipo de '' é. Pode adivinhar que você quis dizer text , mas é um pouco exigente demais para isso. Então reclama. A questão simplifica-se para:
regress=> SELECT array_to_string(array_agg(''), ',');
ERROR:  could not determine polymorphic type because input has type "unknown"

Para resolver isso, escreva um literal digitado:
TEXT '' AS name

ou use um elenco:
CAST('' AS text) AS name

ou a abreviação do PostgreSQL:
''::text

exemplos:
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)