Installazione di Postgis: il tipo "geometria" non esiste


95

Sto cercando di creare una tabella con Postgis. Lo faccio da questa pagina . Ma quando importi il ​​file postgis.sql, ottengo molti errori:

ERROR:  type "geometry" does not exist

Qualcuno sa come posso risolverlo?

Risposte:


199

Ho avuto lo stesso problema, ma è stato risolto eseguendo il codice seguente

CREATE EXTENSION postgis;

In dettaglio,

  1. apri pgAdmin
  2. seleziona (clicca) il tuo database
  3. fare clic sull'icona "SQL" sulla barra
  4. eseguire "CREATE EXTENSION postgis;" codice

3
Grazie. A proposito, se qualcuno usa "psql" per eseguire questo codice, assicurati che il ruolo abbia l'attributo / privilegio "Superuser".
Yang

2
SALVAVITA! Pensavo di averlo già impostato, quindi continuavo a pensare che fosse qualcos'altro ...
James111

2
Nota che questo è specifico per un database particolare che stai utilizzando. Non è a livello di installazione.
fooquency

1
Ho rimesso a posto un pg_dump e ho avuto lo stesso problema. La mia estensione postgis inserisce i suoi dati in uno SCHEMA personalizzato, chiamato postgis. Avevo bisogno di eseguire il seguente comando e tutto andava di nuovo bene:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman

23

Se l'estensione Postgis è caricata, forse il tuo SQL non trova il tipo di geometria a causa del percorso di ricerca mancante allo schema pubblico.

Provare

SET search_path = ..., public;

nella prima riga del tuo script. (sostituire ... con gli altri percorsi di ricerca richiesti)


22

Puoi farlo dal terminale:

psql mydatabasename -c "CREATE EXTENSION postgis";

18

Per fare in modo che psql si fermi al primo errore, usa -v ON_ERROR_STOP=1(che è disattivato per impostazione predefinita , motivo per cui vedi molti errori). Per esempio:

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

L'errore effettivo è qualcosa come "Impossibile caricare la libreria X", che può variare a seconda della situazione. Come ipotesi, prova questo comando prima di installare lo script sql:

ldconfig

(potrebbe essere necessario aggiungere il prefisso a sudoseconda del sistema). Questo comando aggiorna i percorsi a tutte le librerie di sistema, come GEOS.


5

Devi abilitare l'estensione sul tuo database.

psql my_database -c "CREATE EXTENSION postgis;"


5

Questo errore può verificarsi anche se si tenta di utilizzare i tipi di postgis su un altro schema anziché su public.

Se stai creando il tuo schema, utilizzando postgis 2.3 o versioni successive e riscontri questo errore, procedi come segue :

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;

Quindi puoi procedere con l'uso delle funzionalità postgis.


3

Devi anche assicurarti che l'utente con cui stai tentando di utilizzare l'estensione postgis abbia accesso allo schema in cui è configurato postgis (che nei tutorial che ho letto è chiamato 'postgis').

Ho appena avuto questo errore ed è stato risolto perché avevo concesso solo a un nuovo utente l'accesso al database. Nel database che avevo creato, ho eseguito:

grant all on schema postgis to USERNAME; 

E questo ha risolto questo errore


1

Le risposte qui potrebbero risolvere il tuo problema, tuttavia se hai già abilitato postgis sul tuo DB, il problema potrebbe essere che stai cercando di ripristinare una tabella postgis (con una colonna di geometria) in uno schema diverso da quello in cui è abilitata l'estensione postgis. In pgAdmin puoi fare clic sull'estensione postgis e vedere quale schema è specificato. Se stai tentando di ripristinare una tabella con una colonna della geometria in uno schema diverso, potresti ricevere questo errore.

Ho risolto questo problema modificando la mia estensione postgis, tuttavia non sono sicuro che fosse necessariamente il modo migliore per farlo. Tutto quello che so è che mi ha permesso di ripristinare la tabella.


fino alla versione 2.3 di Postgis potevi spostare l'estensione su un altro schema che mi ha risolto questo problema alcune volte
Daniël Tulp,

0

O...

cursor.execute('create extension postgis')

nel tuo programma python, usando un cursore corrente da psycopg2.


0

Per prima cosa assicurati di avere (corrispondente alla versione pg: psql -V) postgis installato:

sudo apt install postgis postgresql-9.6-postgis-2.3

Appena prima della creazione delle tabelle aggiungere:

db.engine.execute('create extension postgis') 
db.create_all()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.