Postgis-Installation: Typ "Geometrie" existiert nicht


94

Ich versuche mit Postgis eine Tabelle zu erstellen. Ich mache es auf dieser Seite . Aber wenn ich die Datei postgis.sql importiere, erhalte ich viele Fehler:

ERROR:  type "geometry" does not exist

Weiß jemand, wie ich das beheben kann?

Antworten:


198

Ich hatte das gleiche Problem, aber es wurde behoben, indem der folgende Code ausgeführt wurde

CREATE EXTENSION postgis;

Im Detail,

  1. öffne pgAdmin
  2. Wählen Sie Ihre Datenbank aus (klicken Sie darauf)
  3. Klicken Sie in der Leiste auf das Symbol "SQL"
  4. Führen Sie "CREATE EXTENSION postgis" aus. Code

3
Vielen Dank. Übrigens, wenn jemand 'psql' verwendet, um diesen Code auszuführen, stellen Sie sicher, dass die Rolle über das Attribut / die Berechtigung 'Superuser' verfügt.
Yang

2
LEBENSRETTER! Ich dachte, ich hätte das schon eingerichtet, also dachte ich immer, es wäre etwas anderes ...
James111

2
Beachten Sie, dass dies spezifisch für eine bestimmte Datenbank ist, die Sie verwenden. Es ist nicht installationsweit.
Frequenz

1
Ich habe einen pg_dump zurückgesetzt und hatte das gleiche Problem. Meine Postgis-Erweiterung fügt die Daten in ein benutzerdefiniertes SCHEMA mit dem Namen ein postgis. Ich musste den folgenden Befehl ausführen, und alles war wieder in DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
Ordnung

23

Wenn die Postgis-Erweiterung geladen ist, findet Ihr SQL den Geometrietyp möglicherweise nicht, da der Suchpfad zum öffentlichen Schema fehlt.

Versuchen

SET search_path = ..., public;

in der ersten Zeile Ihres Scsript. (Ersetzen Sie ... durch die anderen erforderlichen Suchpfade.)


22

Sie können es vom Terminal aus tun:

psql mydatabasename -c "CREATE EXTENSION postgis";

18

Um psql beim ersten Fehler zu stoppen, verwenden Sie -v ON_ERROR_STOP=1( standardmäßig deaktiviert , weshalb viele Fehler angezeigt werden). Beispielsweise:

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

Der eigentliche Fehler ist so etwas wie "Bibliothek X konnte nicht geladen werden", was je nach Situation variieren kann. Versuchen Sie diesen Befehl, bevor Sie das SQL-Skript installieren:

ldconfig

( sudoJe nach System müssen Sie möglicherweise ein Präfix eingeben). Dieser Befehl aktualisiert die Pfade zu allen Systembibliotheken, z. B. GEOS.


5

Sie müssen die Erweiterung in Ihrer Datenbank aktivieren.

psql my_database -c "CREATE EXTENSION postgis;"


5

Dieser Fehler kann auch auftreten, wenn Sie versuchen, Postgis-Typen in einem anderen Schema als zu verwendenpublic .

Wenn Sie mit Postgis 2.3 oder höher ein eigenes Schema erstellen und auf diesen Fehler stoßen, gehen Sie wie folgt vor :

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;

Anschließend können Sie die Postgis-Funktionen verwenden.


3

Sie müssen auch sicherstellen, dass der Benutzer, für den Sie die Postgis-Erweiterung verwenden möchten, Zugriff auf das Schema hat, in dem Postgis eingerichtet ist (das in den von mir gelesenen Tutorials als "Postgis" bezeichnet wird).

Ich hatte gerade diesen Fehler und er wurde behoben, weil ich nur einem neuen Benutzer Zugriff auf die Datenbank gewährt hatte. In der Datenbank, die ich erstellt hatte, lief ich:

grant all on schema postgis to USERNAME; 

Und das hat diesen Fehler behoben


1

Die Antworten hier können Ihr Problem lösen. Wenn Sie jedoch bereits Postgis in Ihrer Datenbank aktiviert haben, besteht das Problem möglicherweise darin, dass Sie versuchen, eine Postgis-Tabelle (mit einer Geometriespalte) in einem anderen Schema als dem, in dem Ihre Postgis-Erweiterung aktiviert ist, wiederherzustellen. In pgAdmin können Sie auf die Postgis-Erweiterung klicken und sehen, welches Schema angegeben ist. Wenn Sie versuchen, eine Tabelle mit einer Geometriespalte in einem anderen Schema wiederherzustellen, wird möglicherweise dieser Fehler angezeigt.

Ich habe dieses Problem behoben, indem ich meine Postgis-Erweiterung geändert habe. Ich bin mir jedoch nicht sicher, ob dies unbedingt der beste Weg war. Ich weiß nur, dass ich damit die Tabelle wiederherstellen konnte.


Bis Postgis Version 2.3 konnten Sie die Erweiterung in ein anderes Schema verschieben, das dieses Problem einige Male für mich löste
Daniël Tulp

0

Oder...

cursor.execute('create extension postgis')

Verwenden Sie in Ihrem Python-Programm einen aktuellen Cursor von psycopg2.


0

Stellen Sie zunächst sicher, dass Sie (passend zur pg-Version: psql -V) postgis installiert haben:

sudo apt install postgis postgresql-9.6-postgis-2.3

Fügen Sie kurz vor der Tabellenerstellung Folgendes hinzu:

db.engine.execute('create extension postgis') 
db.create_all()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.