Sql 将数组\ U agg输出转换为数组而不是字符串

Sql 将数组\ U agg输出转换为数组而不是字符串,sql,node.js,postgresql,knex.js,Sql,Node.js,Postgresql,Knex.js,我正在使用array\u agg将值分组到一个数组中。第行的输出为: row: anonymous { values: '{(1),(2)}' } 然后我试着在Node中遍历结果 row.values.forEach(…但它表示values.forEach不是函数,因为typeof row.values是字符串 我使用的是array\u agg,那么为什么输出是字符串,如何将其转换为数组呢?如果数组中需要整数,可以使用regex并通过(\d+)的匹配循环 另一种方法是使用array\u to\

我正在使用
array\u agg
将值分组到一个数组中。第行的输出为:

row: anonymous { values: '{(1),(2)}' }
然后我试着在Node中遍历结果

row.values.forEach(…
但它表示
values.forEach
不是函数,因为
typeof row.values
是字符串


我使用的是array\u agg,那么为什么输出是字符串,如何将其转换为数组呢?

如果数组中需要整数,可以使用regex并通过
(\d+)
的匹配循环

另一种方法是使用
array\u to\u string
并使用内容中未出现的值将其连接起来,换行符
\n
例如:
array\u to\u string(一些\u array\u内容,E'\n')
,然后将其拆分

一旦您以某种方式将其放入数组中,
forEach
将起作用


另外,我相信Sequelize可以处理数组:

可以使用以下方法将数组转换为一组行:


我也遇到了这个问题,而unnest不是一个选项,因为需要返回固定数量的行,我不能保证我的内容不会包含
或括号,这使得regex解决方案具有挑战性


我发现最好的解决方案是使用
json\u agg
而不是
array\u agg
(请参阅)这以JSON格式返回结果,node自动将其解释为javascript对象,这样您就可以使用
.forEach
,而无需任何转换。

Postgres wire协议将几乎所有内容都表示为可打印字符串;将其转换为本机数据类型取决于客户端驱动程序(int、float、boolean等)。数组相对较少,因此大多数驱动程序都没有内置的处理方法。不幸的是,字符串格式很难解析;一个解决方法是使用
array\u to\u json
来获得更容易解析的内容。(没有回答,因为我不知道这个驱动程序的具体情况。)
create temp table t (name text);
insert into t values ('name1'),('name2'),('name3'),('name4');

select unnest(array_agg(name)) as aname from t

+-------+
| aname |
+-------+
| name1 |
+-------+
| name2 |
+-------+
| name3 |
+-------+
| name4 |
+-------+