Quá trình nhập của bạn không thành công với lỗi cú pháp trong Hàm tạo ARRAY thậm chí trước khi bạn truy cập vào độ phân giải loại hàm - nơi bạn sẽ nhận được nhiều thông báo lỗi hơn do các kiểu khác không khớp khi bạn loại bỏ hàm tạo ARRAY hoàn toàn không nên có trong lệnh gọi.
Giải pháp của bạn là chuyển các thông số riêng biệt của loại đối sánh , không một mảng. Phần còn lại chỉ là giải thích về những gì chúng tôi đã thấy.
Điều gì đã thực sự xảy ra
Một mảng chỉ có thể bao gồm các giá trị cùng loại, nhưng đầu vào của bạn sẽ trộn lẫn hằng số với chuỗi chữ , không thể giải quyết được.
Nếu bạn muốn nó chuyển thành text[]
(mảng text
), bạn phải cung cấp các ký tự chuỗi như sau:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];
Hoặc một mảng ký tự trực tiếp, như vậy:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];
Nhưng khi bạn bắt đầu một hàm khởi tạo ARRAY với các hằng số, thì chỉ có các kiểu số là hợp pháp để thêm vào. Hoặc ít nhất chuỗi các ký tự có nội dung có thể bị ép buộc về cùng một loại. Bạn có thể :
SELECT ARRAY[1004, 2, 1079412, '1'];
... dẫn đến int[]
. Hoặc:
SELECT ARRAY[1004, 2, 1079412, 1.0];
Hoặc thậm chí:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];
... cả hai đều dẫn đến numeric[]
.
Nhưng là bất hợp pháp và đúng như vậy. ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V']
Bạn có thể tìm thấy các quy tắc chính xác về độ phân giải kiểu cho các trình tạo mảng trong chương này của sổ tay:" Loại Chuyển đổi "-" UNION, CASE và các cấu trúc có liên quan " . Hành trình của bạn kết thúc lúc:
Vì chuỗi ký tự 'WwLEA6XZ0V' không thể chuyển đổi thành integer
.