ここでの問題は、名前としての'' as name
です。 実際には値のタイプを指定しません。 unknown
です タイプ。PostgreSQLは通常、挿入する列や渡す関数などから実際のタイプを推測します。
この場合、それをarray_agg
に渡します。 、これは polymorphc 関数。疑似タイプanyelement
の入力を受け取ることができます 、これは実際には「実行時にそれを理解する」という意味です。
array_to_string
を除いて、PostgreSQLはそれを理解します。 実際にはtext[]
を取りません 入力として。 anyarray
が必要です -anyelement
などの別のポリモーフィックタイプ アレイ用。
したがって、クエリには、その'' as name
のタイプを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)