2012-09-07 2 views
0

pgrouting이 제대로 작동하는지 테스트하려고합니다. 이렇게하려면 다음 특성을 포함하는 테이블을 만들었습니다.assign_vertex_id 오류

 
    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 

어떤 제안이 무엇을 의미합니까?

+1

컬럼 유형, 인덱스 및 제약 조건 (기본적으로'\ d'의 결과가 좋음) 및 * 특히 * 실패한 쿼리를 보여 주면 쉽게 알 수 있습니다. 어떻게 든 동적으로 생성 된 SQL처럼'EXECUTE' 문을 수행하는 함수가 있지만 전달되는 문자열은'NULL'입니다. 한 가지 방법은 일련의 값을 연결하여 그 중 하나가 'NULL'인 경우에 연결하는 것입니다. – kgrittn

답변

2

assign_vertex_id()는 PG 라우팅의 일부로 routing_topology.sql에 정의되어 있습니다. (\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입니다. 방법? 나는 그것이 원인이 될 수있다 생각하지만,

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

내 생각 엔이 기본 테이블의 gid 열 (여기 _r.id) 널 (null)을 포함하고있다 : 음, SQL || 운영자는 연결할 및 NULL 문자열 결과에 NULL 합치 의미/target_id 너무.

ALTER TABLE whatever ALTER COLUMN gid SET NOT NULL; 
+0

gid colun이 이미 null이 아니게 설정되었습니다. 이것은 테이블의 구조입니다. 표 방식 CREATE ( GID 정수를 NOT NULL, 길이 배정 밀도, the_geom 형상 (다중 선 스트링, 4326), 소스 정수, 목표 정수, CONSTRAINT GID PRIMARY KEY (GID) 를) –

0

당신은 PostGIS와 2.0를 사용하고 있습니까 및 선 스트링이있는 테이블이 있습니다 그것을 수정하고 향후 것을 방지하기 위해 제한 조건을 추가?

Postgis 2.0에서 함수 ST_StartPoint() 및 ST_EndPoint()가 다중 선 스트링에서 더 이상 작동하지 않습니다 (http://postgis.refractions.net/docs/ST_StartPoint.html). 그래서 거기에서 실패 할 가능성이 높습니다.

다중 선 스트링을 선 스트링으로 변환해야합니다. 여기에 대한 자세한 정보는 다음과 같습니다 :