【发布时间】:2021-07-24 18:15:55
【问题描述】:
我正在使用 Postgres 和 PostGIS。尝试编写一个根据给定参数选择特定列的函数。
我使用WITH 语句创建结果表,然后将其转换为bytea 以返回。
我需要帮助的部分是$4 部分。我试过它如下所示和$4::text,如果cols=name,两者都给我输入的文本值而不是表中的列值,所以我从查询名称而不是表中的实际名称中返回。我也尝试data($4) 并得到类型错误。
代码是这样的:
CREATE OR REPLACE FUNCTION select_by_txt(z integer,x integer,y integer, cols text)
RETURNS bytea
LANGUAGE 'plpgsql'
AS $BODY$
declare
res bytea;
begin
WITH bounds AS (
SELECT ST_TileEnvelope(z, x, y) AS geom
),
mvtgeom AS (
SELECT ST_AsMVTGeom(ST_Transform(t.geom, 3857), bounds.geom) AS geom, $4
FROM table1 t, bounds
WHERE ST_Intersects(t.geom, ST_Transform(bounds.geom, 4326))
)
SELECT ST_AsMVT(mvtgeom, 'public.select_by_txt')
INTO res
FROM mvtgeom;
RETURN res;
end;
$BODY$;
函数调用示例:
select_by_txt(10,32,33,"col1,col2")
参数 cols 可以是从 1 开始的多个列名,不受上述限制。 cols 中的列名将在调用函数之前检查它们是否为有效列。
【问题讨论】:
-
cols听起来您正在尝试传递 多个 列名。是这样吗?可以有多少?请显示示例调用。 -
是的,当你问@ErwinBrandstetter 时,我已经用一个例子更新了帖子,JGH 下面的答案只用一栏对我有用
标签: postgresql postgis plpgsql dynamic-sql postgresql-13