【问题标题】:Returning both geometry and other attributes columns in PL/pgsql function在 PL/pgsql 函数中返回几何和其他属性列
【发布时间】:2016-09-12 02:31:11
【问题描述】:

我正在尝试在 PL/pgSQL (Postgres 9.5) 中创建一个函数(通过动态执行查询)以从 PostgreSQL/postgis 数据库中的两个表(ad 和 street)返回一些所需的列。表 'ad' 包含 87 行,而表 '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;

'ad' 和 'street' 这两个表具有几何列以及感兴趣区域的地址和街道的其他信息。我想同时获得几何和其他列作为输出。但是,我得到这个函数调用的输出是这样的:

表示该函数正在返回记录集,而不是五个不需要的列。有人可以告诉我如何从表格广告和街道返回几何和属性的列吗?

【问题讨论】:

    标签: postgresql postgis plpgsql


    【解决方案1】:

    要从记录中获取字段,请使用. 后跟字段名称,例如

    SELECT (str_con(ad.geom, st.geom)).street_type FROM ...
    

    或使用.* 获取记录中的所有字段,例如

    SELECT (str_con(ad.geom, st.geom)).* FROM ...
    

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 2012-08-05
      • 1970-01-01
      • 2013-06-19
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多