Postgresql 分配\u顶点\u id错误

Postgresql 分配\u顶点\u id错误,postgresql,postgis,pgrouting,Postgresql,Postgis,Pgrouting,我正在尝试测试pgrouting是否工作正常。为此,我创建了一个包含以下属性的表 Columns: gid | length | the_geom | source | target 柱: 基德| 长度| _geom| 来源| 目标 现在我的问题是,当我尝试执行assign_vertex_id函数时,它给了我以下错误 PL/pgSQL function "assign_vertex_id" line 15 at EXECUTE statement ERROR: qu

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

Columns: gid | length | the_geom | source | target 柱: 基德| 长度| _geom| 来源| 目标 现在我的问题是,当我尝试执行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 PL/pgSQL函数“分配顶点id”第15行的EXECUTE语句 错误:EXECUTE的查询字符串参数为null 上下文:PL/pgSQL函数“分配顶点id”第32行的EXECUTE语句 **********错误********** 错误:EXECUTE的查询字符串参数为null SQL状态:22004 上下文:PL/pgSQL函数“分配顶点id”第32行的EXECUTE语句 任何建议这意味着什么?

分配顶点id()在中定义为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;
错误是使用空参数调用EXECUTE。怎么用?SQL
|
运算符意味着连接,将NULL连接到字符串会导致NULL:

=> select ('string' || null) is null;
 ?column? 
----------
 t
(1 row)
我猜底层表的
gid
列(
\r.id
此处)包含空值,尽管我认为它也可能是源/目标id。修复它,然后添加一个约束以防止继续:

ALTER TABLE whatever ALTER COLUMN gid SET NOT NULL;

您是否使用Postgis 2.0并拥有一个包含多行线的表格

函数ST_StartPoint()和ST_EndPoint()在Postgis 2.0中不再适用于Multilinestrings()。因此,它极有可能在这方面失败


您需要将多重线串转换为线串。关于这方面的更多信息:

如果您显示了列类型、任何索引和约束(基本上,
\d
的输出会很好),尤其是失败的查询,那么就更容易确定了。不知何故,您有一个函数以动态生成的SQL的形式运行
EXECUTE
语句,但它传递的字符串是
NULL
。发生这种情况的一种方法是连接一系列值,其中一个值为
NULL
。这是表格的结构;创建表格方式(gid integer NOT NULL、长度双精度、_geom几何体(MultiLineString,4326)、源整数、目标整数、约束gid主键(gid))