Postgresql. Разбить массив на строки



Все наверно или сталкивались, или столкнуться с проблемой разбиения массива ARRAY[anyelment], anyelment, …] на строки.

Вот рабочая процедура для postgresql:

1
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE FUNCTION unpack(anyarray)
  RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i]
   FROM generate_series(array_lower($1,1),
                        array_upper($1,1)) g(i);
$BODY$
  LANGUAGE SQL IMMUTABLE STRICT
  COST 100
  ROWS 1000;
ALTER FUNCTION unpack(anyarray) OWNER TO postgres;

Вот рабочий кусок кода с использованием этой процедуры:

1
2
3
4
5
6
        SELECT
            (CASE WHEN "pp"."uniqueUrlAnchorId" IS NOT NULL THEN "pp"."uniqueUrlAnchorId" ELSE "global"."insertUrlAnchor"("t"."anchor") END) AS "uniqueUrlAnchorId",
            "t"."anchor"
        FROM
            (SELECT unpack(tmpAnchorArray)) AS "t"("anchor")
            LEFT JOIN "global"."uniqueUrlAnchors" AS "pp" ON ("pp"."anchor")::text = ("t"."anchor")::text

tmpAnchorArray в моём случает определён как text[];

Как видим ща сложностью окружающих конструкций использование unpack довольно прозрачно и просто. Удачи!

Похожие статьи:

  1. Обход массива в PostgreSql (plpgsql)

Ответить


[ Ctrl + Enter ]