将bytea组合为单个bytea

问题描述 投票:1回答:1

我在Postgres 12中具有一个plpgsql函数,该函数返回SETOF bytea,然后在服务器上将其制成单个bytea

CREATE OR REPLACE FUNCTION public.get_tile(z integer, x integer, y integer)
 RETURNS SETOF bytea
 LANGUAGE plpgsql
 STABLE PARALLEL SAFE
AS $function$
BEGIN
RETURN QUERY EXECUTE FORMAT('
  WITH bounds AS (
    SELECT ST_TileEnvelope(%s, %s, %s) AS geom
  )
  SELECT
    ST_AsMVT(mvtgeom, ''lyr_'' || layer_id, 4096, ''geom'', ''feature_id'')
  FROM (
    SELECT
      ST_AsMVTGeom(t.geom, bounds.geom, 4096, 0) AS geom,
      id AS feature_id,
      layer_id
    FROM my_geom_table t, bounds
    WHERE ST_Intersects(t.geom, bounds.geom)
  ) mvtgeom
  GROUP BY layer_id',
  z, x, y
);
END;
$function$;

有人告诉我,如果在查询中进行串联,则该过程可能会更高效。我知道bytea可以与||串联,但是我不知道如何将SETOF bytea串联成一个。

顺便说一句,多行的原因是给每一层正确的名称('lyr' || layer_id,这是几何图形表上的列)。

是否可以更新此功能以返回一行,其中包含每一层的所有图块数据?

postgresql aggregate-functions postgis plpgsql bytea
1个回答
1
投票

[string_agg(expression, delimiter)也可以聚合string_agg(expression, delimiter)

© www.soinside.com 2019 - 2024. All rights reserved.