2016-11-18 17 views
0

Что мне нужно, это строка/текст JSON-совместимый массив массивов, как следующее:как вернуть массив (BIGINT, двойной точности) из функции для того, чтобы преобразовать его в массив JSON

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

, чтобы вернуть его с сервера клиенту без какой-либо дальнейшей разработки.

У меня есть функция, которая запрашивает таблицу, которая возвращает два поля, но я хотел бы вернуть массив массивов, чтобы вызвать функцию, а затем вызвать array_to_json. Затем я хотел бы преобразовать его в текст/строку.

Возможно ли это? Может ли массив массивов иметь два разных типа?

+0

почему не использовать массив объектов? [{type1, type2}] – Ali7091

+0

, потому что ожидаемый результат - это то, что я разместил, но в случае, если это невозможно, я сделаю так – Bertuz

+0

Может ли массив массивов иметь два разных типа? yse, это может – Ali7091

ответ

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 является псевдонимом для double precision в Postgres.

Может быть более разумное решение, например, вернуть тип данных json непосредственно из функции.

Похожие:

+0

приятное «стандартное» решение! Как насчет возврата таблицы с двумя столбцами? Какой из двух, по вашему мнению, более эффективен? Я думал о том, чтобы вернуть его, а затем перебрать его с помощью курсора – Bertuz

+1

@Bertuz: я бы предпочел функцию таблицы с двумя столбцами. Вероятно, более эффективен для больших наборов. –