【问题标题】:Concat setof bytea into single bytea将 setof bytea 连接为单个 bytea
【发布时间】:2020-09-26 18:17:23
【问题描述】:

我在 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】:

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

    CREATE OR REPLACE FUNCTION public.get_tile(z integer, x integer, y integer)
      RETURNS bytea
      LANGUAGE sql STABLE PARALLEL SAFE AS
    $func$
    WITH bounds(geom) AS (SELECT ST_TileEnvelope(z,x,y))
    SELECT string_agg(mvt, '')
    FROM  (
       SELECT ST_AsMVT(mvtgeom, 'lyr_' || layer_id, 4096, 'geom', 'feature_id') AS mvt
       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
       ) sub;
    $func$;
    

    RETURNS子句仅更改为bytea。没有SETOF

    不使用任何分隔符 (''),但您可以在需要时使用。

    演示一个简化的 SQL 函数。
    这是一个简单的查询。无需动态 SQL。甚至不需要 PL/pgSQL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 2021-12-20
      • 1970-01-01
      • 2023-02-17
      • 2012-08-24
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多