动态表查询选择

时间:2019-09-06 07:44:41

标签: postgresql postgis

大家好,我想创建一个动态表查询,以便在运行时进行更新。我有两个postgis表,一个包含点-tablename(records),另一个包含多边形-tablename(OpDMA)。此选择查询:

Create table Op_DMAConn as
SELECT pol.id as polygon_id, poi.id as point_id 
FROM "OpDMA" pol
LEFT JOIN records poi ON (ST_Intersects(poi.geom, pol.geom))

返回点的polygon_id多边形和point_id。我希望此查询在运行时执行!

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是“ EXECUTE”语句。 https://www.postgresql.org/docs/current/sql-execute.html

例如,您可以这样做:

CREATE OR REPLACE FUNCTION public.fn_pointer(points_table_name varchar, polygon_table_name varchar)
 returns  table(polygon_id int, point_id int)
LANGUAGE plpgsql AS
$$
declare
    final_query varchar;
begin
    query := 'SELECT ST_Contains(polygon.geom, point.geom)
    FROM public."'||points_table_name||'" point, public."'||polygon_table_name||'" polygon;'

    -- do what you have to do to make your query return you correct table

    return query execute final_query;
end
$$
;

select fn_pointer('table_name_1','table_name_2');

希望这会有所帮助。