我正在尝试测试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
任何建议是什么意思?
答案 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。关于这里的更多信息: