如何从函数返回一个(bigint,double precision)数组,以便将其转换为json数组

时间:2016-11-18 15:23:43

标签: arrays json postgresql plpgsql postgresql-9.2

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

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

以便将其从服务器返回到客户端而无需进一步详细说明。

我有一个查询返回两个字段的表的函数,但我想返回一个数组数组,以便调用该函数,然后调用array_to_json。然后,我想将其转换为text / string。

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

1 个答案:

答案 0 :(得分: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

相关: