如何使用函数 pgr_dijkstra 的循环

how to use a loop with the function pgr_dijkstra

我想使用循环来计算两个节点 152 和 17720 之间的行进距离(我使用函数 pgr_dijkstra),每次删除一个单元格。一个单元格包含多个道路链接。 grid_edges_routard table 包含道路链接和相应的单元格。 我想为每个阻塞的单元格计算两个节点之间的行进距离。 我必须使用 pgr_dijkstra 来第二次显示所访问的链接。

CREATE OR REPLACE FUNCTION get_dist_grid() 
 RETURNS TABLE (
 celref_blocked INT,
 dist INT
) AS $$
DECLARE 
    var_r record;
BEGIN
 FOR var_r IN(SELECT distinct(cellule)as cel from grid_edges_routard )  
 LOOP

 SELECT * FROM pgr_dijkstra('SELECT id, source, target,cost 
                    FROM road_routard.edges_vulnerabilite 
                    where id not in (select edge_id
                                                     from grid_edges_routard
                                                     where cellule=var_r)  ',152   ,17720, FALSE)
                 where edge=-1; 
     celref_blocked  := var_r.cel ;            

        RETURN NEXT;
 END LOOP;
END; $$ 
LANGUAGE 'plpgsql';

select get_dist_grid()

我收到一条错误消息:错误:列 « var_r » 不存在。 我使用 postgresql 9.5.

定义一个记录类型的新变量 (var_q),然后像这样 Execute 'SELECT * FROM pgr_dijkstra(''SELECT id, source, target,cost FROM road_routard.edges_vulnerabilite where id not in (select edge_id from grid_edges_routard where cellule='||var_r||') '',152 ,17720, FALSE) where edge=-1' into var_q 对定义的变量执行 select 查询 这可能会产生一些错误,因为我们必须转义内部查询的引号,如果它不起作用,请尝试转义引号,然后您可以像使用 celref_blocked := var_r.cel