在 PL/pgsql 函数中返回几何和其他属性列
Returning both geometry and other attributes columns in PL/pgsql function
我正在尝试在 PL/pgSQL (Postgres 9.5) 中创建一个函数(通过动态执行查询)到 return 来自两个 table 的一些所需列(广告和街道) ) 在 PostgreSQL/postgis 数据库中。 Table 'ad' 包含 87 行,而 table 'street' 包含 16,060 行。到目前为止,我所尝试的是由以下代码给出的。此代码的执行时间为 2.9 秒。我知道可以有许多不同的方法来缩短执行时间。这是代码:
Create or Replace Function str_con(ad geometry, street geometry)
Returns Table(address_id integer, address_locations geometry, nearest_streets geometry, traf_speed numeric, street_type character varying) AS $$ Begin
Return Query
Execute 'Select
address_id,
address_locations,
nearest_streets,
traf_speed,
street_type
From
(
Select
ad.gid As address_id,
ad.geom As address_locations,
st.geom As nearest_streets,
st.trafsp As traf_speed,
st.ospmstty As street_type
From
public.ad, public.st
Where ST_DWithin(ad.geom, st.geom, 50.0)
Order By address_id, St_Distance(st.geom, ad.geom)
) As foo'; End; $$ Language 'plpgsql';
我正在通过这个命令调用函数。
Select str_con(ad.geom, st.geom) from ad
Join st On st.gid = ad.gid;
两个table'ad'和'street'有几何列以及感兴趣区域的地址和街道的其他信息。我想将几何和其他列作为输出。但是,我得到这个函数调用的输出是这样的:
意味着该函数正在 return 记录集而不是不需要的五个所需列。有人可以告诉我如何 return 来自 table 的广告和街道的几何和属性列吗?
要从记录中获取字段,请使用 .
后跟字段名称,例如
SELECT (str_con(ad.geom, st.geom)).street_type FROM ...
或使用 .*
从记录中获取所有字段,例如
SELECT (str_con(ad.geom, st.geom)).* FROM ...
我正在尝试在 PL/pgSQL (Postgres 9.5) 中创建一个函数(通过动态执行查询)到 return 来自两个 table 的一些所需列(广告和街道) ) 在 PostgreSQL/postgis 数据库中。 Table 'ad' 包含 87 行,而 table 'street' 包含 16,060 行。到目前为止,我所尝试的是由以下代码给出的。此代码的执行时间为 2.9 秒。我知道可以有许多不同的方法来缩短执行时间。这是代码:
Create or Replace Function str_con(ad geometry, street geometry)
Returns Table(address_id integer, address_locations geometry, nearest_streets geometry, traf_speed numeric, street_type character varying) AS $$ Begin
Return Query
Execute 'Select
address_id,
address_locations,
nearest_streets,
traf_speed,
street_type
From
(
Select
ad.gid As address_id,
ad.geom As address_locations,
st.geom As nearest_streets,
st.trafsp As traf_speed,
st.ospmstty As street_type
From
public.ad, public.st
Where ST_DWithin(ad.geom, st.geom, 50.0)
Order By address_id, St_Distance(st.geom, ad.geom)
) As foo'; End; $$ Language 'plpgsql';
我正在通过这个命令调用函数。
Select str_con(ad.geom, st.geom) from ad
Join st On st.gid = ad.gid;
两个table'ad'和'street'有几何列以及感兴趣区域的地址和街道的其他信息。我想将几何和其他列作为输出。但是,我得到这个函数调用的输出是这样的:
意味着该函数正在 return 记录集而不是不需要的五个所需列。有人可以告诉我如何 return 来自 table 的广告和街道的几何和属性列吗?
要从记录中获取字段,请使用 .
后跟字段名称,例如
SELECT (str_con(ad.geom, st.geom)).street_type FROM ...
或使用 .*
从记录中获取所有字段,例如
SELECT (str_con(ad.geom, st.geom)).* FROM ...