Vấn đề ở đây là '' as name
không thực sự chỉ định một loại cho giá trị. Đó là unknown
loại và PostgreSQL thường suy ra loại thực từ những thứ như cột bạn đang chèn nó vào hoặc hàm nào bạn chuyển nó vào.
Trong trường hợp này, bạn chuyển nó vào array_agg
, là một polymorphc hàm số. Nó có thể nhận đầu vào của anyelement
kiểu giả , thực sự chỉ có nghĩa là "tìm ra nó trong thời gian chạy".
PostgreSQL sẽ vẫn tìm ra nó ngoại trừ array_to_string
không thực sự nhận text[]
làm đầu vào. Nó cần anyarray
- một kiểu đa hình khác, như anyelement
cho mảng.
Vì vậy, không có gì trong truy vấn để cho PostgreSQL biết loại nào ''
Là. Nó có thể đoán ý bạn là text
, nhưng nó hơi quá cầu kỳ cho điều đó. Vì vậy, nó phàn nàn. Vấn đề được đơn giản hóa thành:
regress=> SELECT array_to_string(array_agg(''), ',');
ERROR: could not determine polymorphic type because input has type "unknown"
Để giải quyết vấn đề này, hãy viết một ký tự đã nhập:
TEXT '' AS name
hoặc sử dụng dàn diễn viên:
CAST('' AS text) AS name
hoặc viết tắt của PostgreSQL:
''::text
ví dụ:
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)