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ć?
postgresql
geometry
postgis
yetty
źródło
źródło
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; $$ ;
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)
źródło
Możesz to zrobić z terminala:
psql mydatabasename -c "CREATE EXTENSION postgis";
źródło
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: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:
(w
sudo
zależności od systemu może być konieczne wprowadzenie przedrostka ). To polecenie aktualizuje ścieżki do wszystkich bibliotek systemowych, takich jak GEOS.źródło
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.
źródło
Musisz włączyć rozszerzenie w swojej bazie danych.
psql my_database -c "CREATE EXTENSION postgis;"
źródło
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
źródło
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ół.
źródło
Lub...
cursor.execute('create extension postgis')
w programie w języku Python, używając bieżącego kursora z psycopg2.
źródło
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()
źródło