Postgis 설치 : "지오메트리"유형이 없습니다.


95

Postgis로 테이블을 만들려고합니다. 나는이 페이지에서 그것을한다 . 그러나 postgis.sql 파일을 가져올 때 많은 오류가 발생합니다.

ERROR:  type "geometry" does not exist

아무도 내가 어떻게 고칠 수 있는지 알고 있습니까?

답변:


199

나는 같은 문제가 있었지만 다음 코드를 실행하여 수정되었습니다.

CREATE EXTENSION postgis;

상세히,

  1. pgAdmin 열기
  2. 데이터베이스 선택 (클릭)
  3. 막대에서 "SQL"아이콘을 클릭하십시오.
  4. "CREATE EXTENSION postgis"실행 암호

3
감사. BTW, 누군가 'psql'을 사용하여이 코드를 실행하는 경우 역할에 '수퍼 유저'속성 / 권한이 있는지 확인하십시오.
Yang

2
생명 보호! 나는 ... 나는 그것이 뭔가 다른했다 생각을 유지 그래서 나는 이미이 최대를 설정 거라고 생각
James111

2
이것은 사용중인 특정 데이터베이스에만 해당됩니다. 설치 전체가 아닙니다.
fooquency

1
나는 pg_dump를 다시 넣고 같은 문제가 발생했습니다. 내 postgis 확장 프로그램은 데이터를 postgis. 다음 명령을 실행해야했고 모든 것이 다시 DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
정상화

23

Postgis-Extension이로드되면 공용 스키마에 대한 검색 경로가 누락되어 SQL에서 geometry-type을 찾지 못할 수 있습니다.

시험

SET search_path = ..., 공개;

scsript의 첫 번째 줄에 있습니다. (다른 필수 검색 경로로 대체하십시오)


22

터미널에서 할 수 있습니다.

psql mydatabasename -c "CREATE EXTENSION postgis";

18

첫 번째 오류에서 psql을 중지하려면 -v ON_ERROR_STOP=1( 기본적으로 꺼져 있으므로 많은 오류가 표시되는 이유)를 사용하십시오. 예를 들면 :

psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql

실제 오류는 "라이브러리 X를로드 할 수 없음"과 같은 것으로 상황에 따라 다를 수 있습니다. 추측으로 SQL 스크립트를 설치하기 전에 다음 명령을 시도하십시오.

ldconfig

( sudo시스템에 따라 접두사가 필요할 수 있습니다). 이 명령은 GEOS와 같은 모든 시스템 라이브러리에 대한 경로를 업데이트합니다.


5

데이터베이스에서 확장을 활성화해야합니다.

psql my_database -c "CREATE EXTENSION postgis;"


5

이 오류는이 아닌 다른 스키마 에서 postgis 유형을 사용하려는 경우에도 발생할 수 있습니다 public.

postgis 2.3 이상을 사용하여 자신의 스키마를 생성하고이 오류가 발생하는 경우 여기에 설명 된대로 다음 수행 하십시오 .

CREATE SCHEMA IF NOT EXISTS my_schema;
CREATE extension postgis;

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA my_schema;

ALTER EXTENSION postgis 
  UPDATE TO "2.5.2next";

ALTER EXTENSION postgis 
  UPDATE TO "2.5.2";

SET search_path TO my_schema;

그런 다음 postgis 기능을 계속 사용할 수 있습니다.


3

또한 postgis 확장을 사용하려는 사용자가 postgis가 설정된 스키마 (내가 읽은 자습서에서 'postgis'라고 함)에 액세스 할 수 있는지 확인해야합니다.

방금이 오류가 발생했으며 데이터베이스에 대한 새 사용자 액세스 권한 만 부여했기 때문에 해결되었습니다. 내가 만든 데이터베이스에서 다음을 실행했습니다.

grant all on schema postgis to USERNAME; 

그리고 이것은이 오류를 해결했습니다.


1

여기에 대한 답변으로 문제를 해결할 수 있지만 DB에서 이미 postgis를 활성화 한 경우 postgis 확장이 활성화 된 곳이 아닌 다른 스키마로 postgis 테이블 (지오메트리 열 포함)을 복원하려고 할 수 있습니다. pgAdmin에서 postgis 확장을 클릭하고 지정된 스키마를 볼 수 있습니다. geometry 열이있는 테이블을 다른 스키마로 복원하려고하면이 오류가 발생할 수 있습니다.

내 postgis 확장을 변경하여이 문제를 해결했지만 이것이 반드시 최선의 방법인지 확실하지 않습니다. 내가 아는 것은 테이블을 복원 할 수 있다는 것뿐입니다.


PostGIS와 버전 2.3까지 당신은 나를 위해 몇 번이 문제를 해결 다른 스키마 확장을 움직일 수
다니엘 TULP

0

또는...

cursor.execute('create extension postgis')

psycopg2의 현재 커서를 사용하여 파이썬 프로그램에서.


0

먼저 (pg 버전 : psql -V와 일치) postgis가 설치되어 있는지 확인하십시오.

sudo apt install postgis postgresql-9.6-postgis-2.3

테이블 생성 직전 추가 :

db.engine.execute('create extension postgis') 
db.create_all()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.