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?
Respuestas:
Tuve el mismo problema, pero se solucionó ejecutando el siguiente código
CREATE EXTENSION postgis;
En detalle,
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; $$ ;
Puedes hacerlo desde la terminal:
psql mydatabasename -c "CREATE EXTENSION postgis";
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 sudo
según su sistema). Este comando actualiza las rutas de todas las bibliotecas del sistema, como GEOS.
Debe habilitar la extensión en su base de datos.
psql my_database -c "CREATE EXTENSION postgis;"
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.
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
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.