assign_vertex_id错误

时间:2012-09-07 19:38:24

标签: postgresql postgis pgrouting

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

  Columns:
 gid      |
 length   |
 the_geom |
 source   |
 target

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

PL/pgSQL function "assign_vertex_id" line 15 at EXECUTE statement
ERROR:  query string argument of EXECUTE is null
CONTEXT:  PL/pgSQL function "assign_vertex_id" line 32 at EXECUTE statement

********** Error **********

ERROR: query string argument of EXECUTE is null
SQL state: 22004


Context: PL/pgSQL function "assign_vertex_id" line 32 at EXECUTE statement

任何建议是什么意思?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您使用的是Postgis 2.0并且有一个Multilinestrings表吗?

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

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