将postgresql数组打包成行

pot*_*uff 45 sql arrays postgresql rows

在PostgreSQL中将数组展开成行的最快方法是什么?即

我们有:

a
-
{1,2}
{2,3,4}
Run Code Online (Sandbox Code Playgroud)

我们需要:

b
- 
1
2
2
3
4
Run Code Online (Sandbox Code Playgroud)

我用的是:

select explode_array(a) as a from a_table;
Run Code Online (Sandbox Code Playgroud)

explode_array在哪里:

create or replace function explode_array(in_array anyarray) returns setof anyelement as
$$
    select ($1)[s] from generate_series(1,array_upper($1, 1)) as s;
$$
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

Gav*_*vin 66

使用不当.例如:

CREATE OR REPLACE FUNCTION test( p_test text[] )
  RETURNS void AS
$BODY$
BEGIN
  SELECT id FROM unnest( p_test ) AS id;
END;
$BODY$
  LANGUAGE plpgsql IMMUTABLE
  COST 1;
Run Code Online (Sandbox Code Playgroud)


小智 27

unfst - >将数组扩展为一组行

不需要的(ARRAY [1,2])1 2

http://www.sqlfiddle.com/#!1/c774a/24

  • **例如`select unnest('{1,2}':: int [])`或`select unnest('{a,b}':: text [])`**将返回具有适当类型的行列...更多内容:http://www.postgresql.org/docs/9.4/static/functions-array.html (6认同)

mar*_*peg 17

如果你有一个像这样的表users_to_articles

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
用户身份文章
1{1,2}
2{6,2,7}
\n
\n

并且需要对articles数组进行分解以获得:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n
用户身份\xc2\xa0article_id
11
12
26
22
27
\n
\n

你可以运行类似的东西:

\n
CREATE TABLE "users_to_articles" (\n  "user_id" SERIAL PRIMARY KEY,\n  "articles" INT[]\n);\n\nINSERT INTO "users_to_articles" ("articles")\nVALUES (\'{1,2}\'), (\'{6,2,7}\');\n\nSELECT\n  "user_id"\n, "article_id"\nFROM "users_to_articles", unnest("articles") AS "article_id";\n
Run Code Online (Sandbox Code Playgroud)\n

这是一个工作的 sqlfiddle:
\n http://www.sqlfiddle.com/#!17/c26742/1

\n