到目前为止的建议还不是最佳的。有一个更简单的解决方案和实际适用的解释。
有疑问时,只需让 Postgres 向您展示即可:
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[]
);
插入 2 个基本行:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
请参阅语法基本行类型:
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
请参阅语法行数组:
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
您所需要做的就是将每个行文字用双引号括起来 - 这仅需要禁用comma在每个行类型中。
当没有额外的特殊字符时,额外的(转义的)双引号将是多余的噪音。
这些都与转义字符串语法没有任何关系,它已经被转向off从 Postgres 9.1 开始默认。您必须通过前缀显式声明转义字符串语法E
, like E'string\n'
。但没有充分的理由这样做。
fiddle
Old sqlfiddle
相关答案及更多解释:
- 在 PostgreSQL 中插入带单引号的文本
- 如何将自定义类型数组传递给 Postgres 函数
- 用于 INSERT 行数组的 PL/pgSQL 函数