【发布时间】: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