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ć?
Odpowiedzi:
Miałem ten sam problem, ale został on rozwiązany przez uruchomienie następującego kodu
CREATE EXTENSION postgis;
Szczegółowo,
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)
Możesz to zrobić z terminala:
psql mydatabasename -c "CREATE EXTENSION postgis";
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 sudo
zależności od systemu może być konieczne wprowadzenie przedrostka ). To polecenie aktualizuje ścieżki do wszystkich bibliotek systemowych, takich jak GEOS.
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.
Musisz włączyć rozszerzenie w swojej bazie danych.
psql my_database -c "CREATE EXTENSION postgis;"
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
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ół.