Lời khuyên cho đến nay không phải là tối ưu. Có một giải pháp đơn giản hơn và một lời giải thích thực sự có thể áp dụng được.
Khi nghi ngờ, chỉ cần yêu cầu Postgres chỉ cho bạn :
CREATE TEMP TABLE pencil_count ( -- table also registers row type
pencil_color varchar(30)
, count integer
);
CREATE TEMP TABLE pencils (
id serial
, pencils_ pencil_count[]
);
Chèn 2 hàng cơ bản:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Xem cú pháp cho loại hàng cơ bản :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Xem cú pháp cho một mảng hàng :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Tất cả những gì bạn cần là đặt mỗi hàng theo nghĩa đen trong dấu ngoặc kép - điều này chỉ cần thiết để vô hiệu hóa ý nghĩa đặc biệt của dấu phẩy trong mỗi loại hàng.
Dấu ngoặc kép bổ sung (thoát) sẽ là nhiễu dư thừa trong khi không có ký tự đặc biệt bổ sung.
Không có gì trong số này liên quan đến cú pháp chuỗi thoát , đã bị tắt theo mặc định kể từ Postgres 9.1. Bạn sẽ phải khai báo cú pháp chuỗi thoát một cách rõ ràng bằng tiền tố E
, như E'string\n'
. Nhưng không có lý do chính đáng để làm điều đó.
db <> fiddle tại đây
cũ sqlfiddle
Câu trả lời liên quan với giải thích thêm:
- Chèn văn bản bằng một trích dẫn trong PostgreSQL
- Cách chuyển mảng kiểu tùy chỉnh vào hàm Postgres
- PL / pgSQL Array of Rows