【问题标题】:how to return an array of (bigint, double precision) from a function in order to convert it to json array如何从函数返回(bigint,双精度)数组以将其转换为json数组
【发布时间】:2016-11-18 15:23:43
【问题描述】:

我需要的是一个字符串/文本兼容 json 的数组,如下所示:

[
    [1421420100, 14214201003487],
    [1421420101, 14214201003487],
    [1421420109, 14214201003487]
...
]

为了将其从服务器返回给客户端,无需进一步说明。

我有一个查询返回两个字段的表的函数,但我想返回一个数组数组以便调用该函数,然后调用array_to_json。然后,我想把它转换成文本/字符串。

这可能吗?数组数组可以有两种不同的类型吗?

【问题讨论】:

  • 为什么不使用对象数组? [{type1,type2}]
  • 因为预期的输出是我发布的,但如果不可能,我会这样做
  • 数组数组可以有两种不同的类型吗?是的,它可以
  • 你能给我指路吗?我确信每个元素都应该具有相同的类型。允许:{{1,4}, {5,9}},不允许{{1,'4'}, {5,'9'}}。也许我错了?根据this question没有
  • @Ali7091:Postgres 数组只能包含相同类型的元素。

标签: arrays json postgresql plpgsql postgresql-9.2


【解决方案1】:

Postgres 数组不能保存不同类型的元素。
但您可以改为返回 复合类型数组 (bigint, double precision)。但是,该类型需要在系统中注册。使用显式 CREATE TYPE 语句或隐式作为表或视图的行类型。

例子:

CREATE TYPE int8_float AS (b bigint, f float);

CREATE OR REPLACE FUNCTION f_combo_arr()
  RETURNS int8_float[] AS
$func$
   SELECT ARRAY(SELECT (int8_col1, float_col)::int8_float FROM tbl);
$func$  LANGUAGE sql;

呼叫:

SELECT f_combo_arr();

float 是 Postgres 中 double precision 的别名。

可能有更聪明的解决方案,比如直接从函数返回数据类型json

相关:

【讨论】:

  • 不错的“标准”解决方案!如果返回一个包含两列的 TABLE 呢?你觉得这两个哪个效率更高?我正在考虑返回它,然后用光标遍历它
  • @Bertuz:我更喜欢有两列的表函数。可能对大集合更有效。
猜你喜欢
  • 2018-12-30
  • 2011-07-07
  • 2011-02-23
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
相关资源
最近更新 更多