如何构造一个包含数组的组合类型的数组文字?

9

I have a composite type like

CREATE TYPE example AS (id integer, some_stuff integer[]);

我希望我可以使用这种类型的数组作为函数的参数。唯一的问题是我找不到一种方法来构建该类型的数组字面量...如果我试图从PostgreSQL中获取它:

WITH elements AS (
    SELECT (12, '{1,2}')::example AS e UNION 
    SELECT (3, '{3,1}')::example 
)
SELECT array_agg(e) FROM elements;

我收到了以下内容:
{"(3,\"{3,1}\")","(12,\"{1,2}\")"}

但是看:

SELECT E'{"(3,\"{3,1}\")","(12,\"{1,2}\")"}'::example[];

ERROR:  malformed array literal: "{"(3,"{3,1}")","(12,"{1,2}")"}"
LINE 1: select E'{"(3,\"{3,1}\")","(12,\"{1,2}\")"}'::example[]

有没有一种方法可以做到这一点?
1个回答

11

尝试使用ARRAYROW构造器:

Select array[row(3, array[3,1]), row(12, array[1,2])]::example[];
               array
------------------------------------
 {"(3,\"{3,1}\")","(12,\"{1,2}\")"}
(1 row)

如果您想不使用构造函数来解决问题,则可以使用以下示例:

Select E'{"(3,\\"{3,1}\\")","(12,\\"{1,2}\\")"}'::example[];
              example
------------------------------------
 {"(3,\"{3,1}\")","(12,\"{1,2}\")"}
(1 row)

正如你所看到的,这里的主要问题是你需要编写\\",因为这实际上意味着使用"转义"字符串语法看到的\"(即你第一次选择的输出)。


谢谢!唯一的问题是我必须在这里使用字面量,数组构造器不是一个选项。幸运的是,这是一个罕见的情况 :) - dezso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接