2017-01-11 1 views
0

저는 Python에서 Postgres에 함수를 작성하려고합니다. 포스트 그레스 데이터베이스에 연결하면 Psycopg 2가 사용되고 다른 인스턴스에서는 성공적으로 연결됩니다. 코드 : 나는 pgAdmin에서 코드를 실행하면Python에서 Postgres 함수를 만듭니다.

line 84, in
ROWS 1000;' %(schema))
ProgrammingError: type geometry does not exist

이 성공적으로 실행 :

pg_cursor.execute('CREATE OR REPLACE FUNCTION %s.fix_geometry(geometry) \ 
    RETURNS SETOF geometry AS\ 
    $BODY$\ 
     SELECT geom the_geom\ 
     FROM \ 
       (\ 
       SELECT (st_dump(st_buffer(st_snaptogrid(st_makevalid(the_geom), 0.5), 0))).geom\ 
       FROM (SELECT geom the_geom FROM st_dump(st_snaptogrid($1, 0.5))) a\ 
       ) b\ 
     WHERE geometrytype(geom) = \'POLYGON\' AND st_area(geom) >= 0.01;\ 

    $BODY$\ 
     LANGUAGE sql VOLATILE\ 
     COST 100\ 
     ROWS 1000;' %(schema)) #line 84 

pg_connection.commit() 
pg_cursor.execute('ALTER FUNCTION %s.fix_geometry(geometry) OWNER TO analysis' % (schema)) 
pg_connection.commit() 

는 오류가 발생합니다. 내가 뭘 놓치고 있니?

파이썬 2.7, 포스트 그레스 9.3

답변

0

이 오류가 단지 제공된 코드 이외의 것을 밝혀졌습니다. Postgre는 공용 스키마 내부에 지오메트리 형식을 가지고 있습니다.이 코드의 검색 경로를 정의하면 작업중인 스키마 만 정의했습니다. 대중은 포함되지 않았다. 그럼 ....

pg_cursor.execute('set search_path = %s, public' % (schema)) 
pg_connection.commit() 
관련 문제