Instalación de Postgis: el tipo "geometría" no existe

95

Estoy intentando crear una tabla con Postgis. Lo hago por esta página . Pero cuando importo el archivo postgis.sql, obtengo muchos errores:

ERROR:  type "geometry" does not exist

¿Alguien sabe cómo puedo solucionarlo?

yetty
fuente

Respuestas:

201

Tuve el mismo problema, pero se solucionó ejecutando el siguiente código

CREATE EXTENSION postgis;

En detalle,

  1. abrir pgAdmin
  2. seleccione (haga clic) su base de datos
  3. haga clic en el icono "SQL" en la barra
  4. ejecutar "CREATE EXTENSION postgis;" código
Krishna Sapkota
fuente
3
Gracias. Por cierto, si alguien usa 'psql' para ejecutar este código, asegúrese de que el rol tenga el atributo / privilegio 'Superusuario'.
Yang
2
SALVADOR DE VIDA! Pensé que ya lo había configurado, así que seguí pensando que era otra cosa ...
James111
2
Tenga en cuenta que esto es específico de una base de datos en particular que está utilizando. No es para toda la instalación.
fooquency
1
Devolví un pg_dump y tuve el mismo problema. Mi extensión postgis coloca sus datos en un ESQUEMA personalizado, llamado postgis. Necesitaba ejecutar el siguiente comando, y todo volvió a estar bien:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman
23

Si se carga Postgis-Extension, entonces su SQL tal vez no encuentre el tipo de geometría debido a que falta la ruta de búsqueda al esquema público.

Tratar

SET search_path = ..., público;

en la primera línea de su scsript. (reemplace ... con las otras rutas de búsqueda requeridas)

Ludwig
fuente
22

Puedes hacerlo desde la terminal:

psql mydatabasename -c "CREATE EXTENSION postgis";
Brendan Nee
fuente
18

Para que psql se detenga en el primer error, use -v ON_ERROR_STOP=1(que está desactivado de forma predeterminada , por lo que ve muchos errores). Por ejemplo:

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

El error real es algo así como "no se pudo cargar la biblioteca X", que puede variar según su situación. Como conjetura, pruebe este comando antes de instalar el script sql:

ldconfig

(es posible que deba usar el prefijo sudosegún su sistema). Este comando actualiza las rutas de todas las bibliotecas del sistema, como GEOS.

Mike T
fuente
5

Debe habilitar la extensión en su base de datos.

psql my_database -c "CREATE EXTENSION postgis;"

Baptiste Donaux
fuente
5

Este error también puede ocurrir si intenta utilizar tipos postgis en otro esquema en lugar de public.

Si está creando su propio esquema, utilizando postgis 2.3 o superior y encuentra este error, haga lo siguiente como se indica aquí :

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;

Luego puede proceder a utilizar las funciones de postgis.

Leonardo Kuffo
fuente
3

También debe asegurarse de que el usuario con el que está intentando usar la extensión postgis tenga acceso al esquema donde se configura postgis (que en los tutoriales que leí se llama 'postgis').

Acabo de tener este error y se solucionó porque solo le había dado acceso a la base de datos a un nuevo usuario. En la base de datos que había creado, ejecuté:

grant all on schema postgis to USERNAME; 

Y esto resolvió este error

mozboz
fuente
1

Las respuestas aquí pueden resolver su problema, sin embargo, si ya tiene habilitado postgis en su base de datos, el problema puede ser que esté intentando restaurar una tabla postgis (con una columna de geometría) en un esquema que no sea donde su extensión postgis está habilitada. En pgAdmin puede hacer clic en la extensión postgis y ver qué esquema se especifica. Si está intentando restaurar una tabla con columna de geometría en un esquema diferente, es posible que obtenga este error.

Resolví esto modificando mi extensión de postgis; sin embargo, no estoy seguro de si esa era necesariamente la mejor manera de hacerlo. Todo lo que sé es que me permitió restaurar la mesa.

jase81
fuente
hasta la versión 2.3 de Postgis, podía mover la extensión a otro esquema que me resolvió este problema varias veces
Daniël Tulp
0

O...

cursor.execute('create extension postgis')

en su programa Python, usando un cursor actual de psycopg2.

softweyr
fuente
0

Primero asegúrese de tener (que coincida con la versión de pg: psql -V) postgis instalado:

sudo apt install postgis postgresql-9.6-postgis-2.3

Justo antes de la creación de tablas, agregue:

db.engine.execute('create extension postgis') 
db.create_all()
Karolius
fuente