2017-03-20 5 views
2

postgis 확장자를 사용하여 postgresql 데이터에 지오메트리를 삽입하려고합니다. 특히, WKT 선 스트링을 삽입하려고합니다. 이것은 내가 무엇을했는지입니다 : 내가 가진Laravel을 사용하여 포스트 기어 함수로 삽입

SQLSTATE[42883]: Undefined function: 7 ERROR: function st_geomfromtext(text) does not exist

먼저 사용하여이 매개 변수를하려고 노력하지만, 같은 문제가 있었다 :

$sql = "INSERT INTO myschema.trail (\"name\", \"description\", \"user_id\", \"location_id\", \"source_file\", \"geom\") 
     VALUES ('". 
      $p['name']."', '". 
      $p['description']."', ". 
      \Auth::user()->user_id.", ". 
      $p['location_id'].", '". 
      'uploads/myfile'.", 
      ST_GeomFromText('$wkt'::text))"; 
\DB::insert($sql); 

내가이 작업을 수행 할 때, 나는 오류가 발생합니다. 이 오류는 다음 생성 된 SQL 것을 보여준다 : 나는 복사 생성 된 SQL 문을 붙여 pgAdmin에서 쿼리를 실행하면

INSERT INTO myschema.trail ("name", "description", "user_id", "location_id", "source_file", "geom") 
VALUES ('Test', 'Test', 1, 1, 'uploads/myfile', ST_GeomFromText('LINESTRING(-114.0653326549 49.2872680351, .............')) 

는, 쿼리가 문제없이 실행합니다. 권한 상승 문제 였지만 응용 프로그램에서 postgres 사용자를 사용하려고 시도했지만 도움이되지 않았습니다.

쿼리의 postgis 부분을 제거하면 응용 프로그램에서 올바르게 실행됩니다. 어떤 이유로 든 내 Laravel 응용 프로그램은 postgis 기능을 사용할 수 없지만 pgAdmin은 사용할 수 있습니다.

누구나 전에이 사실을 눈치 채 셨나요? 아니면 어떻게 해결할 수있는 아이디어가 있습니까? 감사합니다

편집

난 그냥뿐만 아니라 다음과 같은 시도하고 내가 같은 오류가있어 :

Trail::create([ 
     'name' => 'test', 
     'description' => 'test', 
     'user_id' => 1, 
     'location' => 1, 
     'source_file' => 'uploads/myfile', 
     'geom' => \DB::raw("ST_GeomFromText('$wkt'::text)") 
    ]); 

답변

0

그래서 스키마를 지정하는 것이 문제인 것처럼 보입니다. PgAdmin에서는 db 함수를 사용하기 위해 db 함수가 일부인 스키마를 지정할 필요가없는 것처럼 보입니다. Laravel에서는 db 함수의 스키마를 지정해야합니다. 그래서 내 코드는 작동하지만, db 스키마를 함수에 추가해야했습니다. 그래서이 작품은 :

Trail::create([ 
    'name' => 'test', 
    'description' => 'test', 
    'user_id' => 1, 
    'location' => 1, 
    'source_file' => 'uploads/myfile', 
    'geom' => \DB::raw("public.ST_GeomFromText('$wkt'::text)") 
]); 

나는 항상 쿼리는 공개 스키마로 기본 설정되어 있다고 생각하지만이 경우에는 사용자가 정의해야한다고 생각합니다.

0

당신이 laravel에 대한 PostGIS와 확장을 사용하고 있습니까? THIS과 같은 것입니다.

기본적으로 laravel은 Postgis 용으로 확장이 추가되지 않은 경우 ST_GeomFromText가 기본 데이터베이스 기능인지 확인하려고합니다. 이것은 지오메트리가있는 객체 작업을 매우 쉽게 도와줍니다. 도움이 되길 바랍니다.

또는 RAW SQL을 실행 해보십시오. 이처럼 :

DB::insert('QUERY...'); 

적절하게 쿼리 매개 변수를 탈출해야합니다.

+0

패키지가 WKT를 지원하지 않는 것처럼 보입니다. 빌드가 실패하고 문서가 끔찍한 것 같습니다. 또한, 내 모든 질문을 읽으면, 당신은 이미'DB :: insert()'를 시도했다는 것을 알게 될 것이다. 제안에 감사한다 – Sehael

+0

문서에 동의하지 않는다. 소스 코드에서 WKT를 지원하는 것처럼 보입니다. – user4212639