0

我正在尝试测试 pgrouting 是否正常工作。为此,我创建了一个包含以下属性的表。

  列:
 吉德 |
 长度 |
 the_geom |
 来源 |
 目标

现在我的问题是,当我尝试执行 assign_vertex_id 函数时,它给了我以下错误;

EXECUTE 语句中的 PL/pgSQL 函数“assign_vertex_id”第 15 行
错误:EXECUTE 的查询字符串参数为空
上下文:执行语句中的 PL/pgSQL 函数“assign_vertex_id”第 32 行

********** 错误 **********

错误:EXECUTE 的查询字符串参数为空
SQL 状态:22004


上下文:执行语句中的 PL/pgSQL 函数“assign_vertex_id”第 32 行

任何建议这是什么意思?

4

2 回答 2

2

assign_vertex_id() 在routing_topology.sql中定义为 PGrouting 的一部分。(运行\df+ assign_vertex_id也会给你当前的来源。)第 32 行的 EXECUTE 语句是:

EXECUTE 'update ' || quote_ident(geom_table) || 
    ' SET source = ' || source_id || 
    ', target = ' || target_id || 
    ' WHERE ' || quote_ident(gid_cname) || ' =  ' || _r.id;

错误是使用 NULL 参数调用 EXECUTE。如何?好吧,SQL||运算符表示连接,将 NULL 连接到字符串会导致 NULL:

=> select ('string' || null) is null;
 ?column? 
----------
 t
(1 row)

我的猜测是gid基础表的列(_r.id此处)包含 NULL,尽管我想它也可能是 source/target_id。修复它,然后添加一个约束以防止这种情况继续发生:

ALTER TABLE whatever ALTER COLUMN gid SET NOT NULL;
于 2012-09-07T20:45:34.613 回答
0

您是否使用 Postgis 2.0 并且有一张带有多行字符串的表格?

在 Postgis 2.0 中,函数 ST_StartPoint() 和 ST_EndPoint() 不再适用于多线串(http://postgis.refractions.net/docs/ST_StartPoint.html)。所以它很可能会在那里失败。

您需要将 Multilinestrings 转换为 Linestrings。关于这里的更多信息:

于 2013-01-30T13:15:39.380 回答