0

pgrouting が正常に機能するかどうかをテストしようとしています。そのために、次の属性を含むテーブルを作成しました。

  列:
 ギッド |
 長さ |
 the_geom|
 ソース |
 目標

今私の問題は、 assign_vertex_id 関数を実行しようとすると、次のエラーが発生することです。

PL/pgSQL関数「assign_vertex_id」EXECUTE文の15行目
エラー: EXECUTE のクエリ文字列引数が null です
CONTEXT: PL/pgSQL 関数 "assign_vertex_id" 行 32 at EXECUTE ステートメント

********** エラー **********

エラー: EXECUTE のクエリ文字列引数が null です
SQL 状態: 22004


コンテキスト: PL/pgSQL 関数 "assign_vertex_id" 行 32 at EXECUTE ステートメント

これはどういう意味ですか?

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;

エラーは、EXECUTE が NULL 引数で呼び出されていることです。どのように?さて、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 を使用していて、Multilinestrings を含むテーブルがありますか?

関数 ST_StartPoint() および ST_EndPoint() は、Postgis 2.0 ではマルチラインストリング ( http://postgis.refractions.net/docs/ST_StartPoint.html ) では機能しなくなりました。そのため、ほとんどの場合、そこで失敗します。

Multilinestrings を Linestrings に変換する必要があります。詳細については、こちらをご覧ください:

于 2013-01-30T13:15:39.380 に答える