Masalahnya di sini adalah '' as name
tidak benar-benar menentukan tipe untuk nilainya. Ini adalah unknown
ketik, dan PostgreSQL biasanya menyimpulkan tipe sebenarnya dari hal-hal seperti kolom tempat Anda memasukkannya atau fungsi apa yang Anda berikan.
Dalam hal ini, Anda meneruskannya ke array_agg
, yang merupakan polimorfik fungsi. Itu dapat mengambil input dari anyelement
tipe-semu , yang sebenarnya hanya berarti "cari tahu saat runtime".
PostgreSQL masih akan mengetahuinya kecuali array_to_string
sebenarnya tidak mengambil text[]
sebagai masukan. Dibutuhkan anyarray
- tipe polimorfik lain, seperti anyelement
untuk array.
Jadi tidak ada dalam kueri yang memberi tahu PostgreSQL jenis apa ''
adalah. Itu bisa menebak maksud Anda text
, tapi agak terlalu rewel untuk itu. Jadi mengeluh. Masalah ini disederhanakan menjadi:
regress=> SELECT array_to_string(array_agg(''), ',');
ERROR: could not determine polymorphic type because input has type "unknown"
Untuk mengatasi ini, tulis literal yang diketik:
TEXT '' AS name
atau gunakan pemeran:
CAST('' AS text) AS name
atau singkatan PostgreSQL:
''::text
contoh:
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)