У меня есть следующая функция, основанная на разделе Функции SQL, возвращающие наборы документации PG, которая принимает два массива одинаковой длины и распаковывает их в набор строк с двумя столбцами.
CREATE OR REPLACE FUNCTION unpack_test(
in_int INTEGER[],
in_double DOUBLE PRECISION[],
OUT out_int INTEGER,
OUT out_double DOUBLE PRECISION
) RETURNS SETOF RECORD AS $$
SELECT $1[rowx] AS out_int, $2[rowx] AS out_double
FROM generate_series(1, array_upper($1, 1)) AS rowx;
$$ LANGUAGE SQL STABLE;
Я выполняю функцию в PGAdmin3, например:
SELECT unpack_test(int_col, double_col) FROM test_data
Это в основном работает, но вывод выглядит так:
|unpack_test|
|record |
|-----------|
|(1, 1) |
|-----------|
|(2, 2) |
|-----------|
...
Другими словами, результатом является одна запись, а не два столбца. Я нашел этот вопрос , который, кажется, дает ответ, но он имеет дело с функцией, которая выбирает непосредственно из таблицы, в то время как моя принимает столбцы в качестве аргументов, так как она должна генерировать серии, используемые для их перебора , Поэтому я не могу назвать его, используя SELECT * FROM function
, как предлагается в этом ответе.