Instalacja Postgis: typ „geometria” nie istnieje

97

Próbuję stworzyć tabelę z Postgisem. Robię to na tej stronie . Ale kiedy importuję plik postgis.sql, otrzymuję wiele błędów:

ERROR:  type "geometry" does not exist

Czy ktoś wie, jak mogę to naprawić?

yetty
źródło

Odpowiedzi:

207

Miałem ten sam problem, ale został on rozwiązany przez uruchomienie następującego kodu

CREATE EXTENSION postgis;

Szczegółowo,

  1. otwórz pgAdmin
  2. wybierz (kliknij) swoją bazę danych
  3. kliknij ikonę „SQL” na pasku
  4. uruchom "CREATE EXTENSION postgis;" kod
Krishna Sapkota
źródło
3
Dzięki. BTW, jeśli ktoś używa 'psql' do uruchomienia tego kodu, upewnij się, że rola ma atrybut / przywilej 'Superuser'.
Yang
2
ŻYCIE SAVER! Myślałem, że już to ustawiłem, więc myślałem, że to coś innego ...
James111
2
Zauważ, że jest to specyficzne dla konkretnej bazy danych, której używasz. Nie obejmuje całej instalacji.
częstotliwość
1
Umieściłem pg_dump z powrotem i miałem ten sam problem. Moje rozszerzenie postgis umieszcza dane w niestandardowym SCHEMACIE o nazwie postgis. Musiałem uruchomić następującą komendę i wszystko znowu było dobrze:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman
23

Jeśli załadowane jest rozszerzenie Postgis, to prawdopodobnie twój SQL nie może znaleźć typu geometrii z powodu braku ścieżki wyszukiwania do schematu publicznego.

Próbować

SET ścieżka_wyszukiwania = ..., publiczna;

w pierwszym wierszu skryptu. (zamień ... na inne wymagane ścieżki wyszukiwania)

ludwig
źródło
22

Możesz to zrobić z terminala:

psql mydatabasename -c "CREATE EXTENSION postgis";
Brendan Nee
źródło
18

Aby psql zatrzymywał się przy pierwszym błędzie, użyj -v ON_ERROR_STOP=1(który jest domyślnie wyłączony , dlatego widzisz wiele błędów). Na przykład:

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

Rzeczywisty błąd to coś w rodzaju „nie można załadować biblioteki X”, co może się różnić w zależności od sytuacji. Domyślnie wypróbuj to polecenie przed zainstalowaniem skryptu sql:

ldconfig

(w sudozależności od systemu może być konieczne wprowadzenie przedrostka ). To polecenie aktualizuje ścieżki do wszystkich bibliotek systemowych, takich jak GEOS.

Mike T.
źródło
6

Ten błąd może również wystąpić, jeśli spróbujesz użyć typów postgis w innym schemacie zamiast public.

Jeśli tworzysz własny schemat, używając Postgis 2.3 lub nowszego i napotykasz ten błąd, wykonaj następujące czynności, jak podano tutaj :

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;

Następnie możesz przystąpić do korzystania z funkcji postgis.

Leonardo Kuffo
źródło
5

Musisz włączyć rozszerzenie w swojej bazie danych.

psql my_database -c "CREATE EXTENSION postgis;"

Baptiste Donaux
źródło
3

Musisz również upewnić się, że użytkownik, którego próbujesz użyć rozszerzenia postgis jako, ma dostęp do schematu, w którym jest ustawiony postgis (który w przeczytanych samouczkach nazywa się „postgis”).

Właśnie miałem ten błąd i został on rozwiązany, ponieważ dałem dostęp do bazy danych nowemu użytkownikowi. W utworzonej przeze mnie bazie danych uruchomiłem:

grant all on schema postgis to USERNAME; 

I to rozwiązało ten błąd

mozboz
źródło
1

Odpowiedzi tutaj mogą rozwiązać twój problem, jednak jeśli masz już włączony postgis w swojej bazie danych, problem może polegać na tym, że próbujesz przywrócić tabelę postgis (z kolumną geometrii) do schematu innego niż ten, w którym włączone jest rozszerzenie postgis. W pgAdmin możesz kliknąć rozszerzenie postgis i zobaczyć, który schemat jest określony. Jeśli próbujesz przywrócić tabelę z kolumną geometrii do innego schematu, możesz otrzymać ten błąd.

Rozwiązałem to, zmieniając moje rozszerzenie postgis - jednak nie jestem pewien, czy to był koniecznie najlepszy sposób, aby to zrobić. Wiem tylko, że pozwoliło mi to przywrócić stół.

jase81
źródło
do wersji Postgis 2.3 można było przenieść rozszerzenie do innego schematu, który kilka razy rozwiązał ten problem
Daniël Tulp
0

Lub...

cursor.execute('create extension postgis')

w programie w języku Python, używając bieżącego kursora z psycopg2.

softweyr
źródło
0

Najpierw upewnij się, że masz zainstalowany postgis (pasujący do wersji pg: psql -V):

sudo apt install postgis postgresql-9.6-postgis-2.3

Tuż przed utworzeniem tabel dodaj:

db.engine.execute('create extension postgis') 
db.create_all()
Karolius
źródło