从函数输出二维数组作为行和列

output 2d array from function as rows and columns

我正在开发一个函数,我在其中创建一个二维数组,类似于...

{{1, 'John', 'Smith'}, {1, 'Jane', 'Doe'}, {3, 'Tony', 'Stark'}}

我正在构建的函数结合了来自几个不同查询的数据,尽管它似乎没有必要,但它似乎是迄今为止我可以结合我的数据的唯一方法。

我 运行 遇到的问题是让我的数组显示为 table。

我这样调用函数:

SELECT * FROM my_func();

^^ 并从上面获取数组输出。 ^^

我希望能够 return 这样的事情:- 如果我可以标记列就更好了。

Col1   | Col2   | Col3
1      | John   | Smith
2      | Jane   | Doe
3      | Tony   | Stark

我试过:SELECT * FROM my_func();哪个更好,但仍然无法使用,因为它将所有内容都放在一个列中。

Col1
1
John
Smith
2
Jane
Doe
3
Tony
Stark

问题中缺少信息,因此假设您想要 return 三列 (int, text, text)。还假设当前的 Postgres 9.5.

普通SQL

LATERAL 连接中使用 generate_subscripts()

WITH t(a) AS (
   SELECT '{{1, John, Smith}, {1, Jane, Doe}, {3, Tony, Stark}}'::text[]
   )
SELECT t.a[i][1]::int AS col1, t.a[i][2] AS col2, t.a[i][3] AS col3
FROM t, generate_subscripts(t.a, 1) i;

相关:

  • Passing an array of arrays as parameter to a function

PL/pgSQL

循环 FOREACH target [ SLICE number ] IN ARRAY expression:

CREATE OR REPLACE FUNCTION my_func(_arr text[])
  RETURNS TABLE (col1 int, col2 text, col3 text) AS
$func$
DECLARE
   m   text[];
BEGIN
   FOREACH m SLICE 1 IN ARRAY _arr
   LOOP
      RETURN QUERY SELECT m[1]::int, m[2], m[3];
   END LOOP;
END
$func$ LANGUAGE plpgsql;

致电:

WITH t(a) AS (
   SELECT '{{1, John, Smith}, {1, Jane, Doe}, {3, Tony, Stark}}'::text[]
   )
SELECT f.*
FROM   t, my_func(t.a) f;

相关:

  • Postgres - array for loop

每return秒:

 col1 | col2 | col3
------+------+-------
    1 | John | Smith
    1 | Jane | Doe
    3 | Tony | Stark