我有一个 PL/pgSQL 函数,它返回一个表,其定义如下:
CREATE OR REPLACE FUNCTION get_movement_aggregation(movement_table varchar,place_table varchar,geom varchar,point_gid varchar, radius numeric DEFAULT 20000, inArea geometry DEFAULT NULL)
RETURNS TABLE(place_i integer) AS
-- actual code here
现在我想通过使用inArea
从另一个表中获得的几何(参数)来使用这个函数。当我尝试以下查询时:
WITH x AS (
SELECT wkb_geometry from tha_adm1
WHERE name_1 = 'Ubon Ratchathani' LIMIT 1
)
SELECT g.*
FROM x,
get_movement_aggregation('movements','places','geom','place_id',14000,x.wkb_geometry)
我收到以下错误:
ERROR: function expression in FROM cannot refer to other relations of same query level
正如我在该条款x
的两个部分中确实提到的那样,这确实是有道理的。FROM
子查询返回以下内容:
+----------------------------------+
| | wkb_geometry |
| | geometry(MultiPolygon,4326) |
+---+------------------------------+
| 1 | some very long number here |
+---+------------------------------+
我只是使用这个参数来过滤我在函数中使用的记录列表。一种解决方案是使用过滤后的记录创建一个临时表并提供给该函数,但如果有一种方法可以使用子查询来做到这一点,那就太好了。
预先感谢您的回答。