Instalação Postgis: o tipo “geometria” não existe

95

Estou tentando criar uma tabela com Postgis. Eu faço isso por esta página . Mas quando eu importo o arquivo postgis.sql, obtenho muitos erros:

ERROR:  type "geometry" does not exist

Alguém sabe como posso consertar?

yetty
fonte

Respostas:

199

Eu tive o mesmo problema, mas foi corrigido executando o seguinte código

CREATE EXTENSION postgis;

Em detalhe,

  1. abrir o pgAdmin
  2. selecione (clique) seu banco de dados
  3. clique no ícone "SQL" na barra
  4. execute "CREATE EXTENSION postgis;" código
Krishna Sapkota
fonte
3
Obrigado. BTW, se alguém estiver usando 'psql' para executar este código, certifique-se de que a função tenha atributo / privilégio 'Superusuário'.
Yang
2
LIFE SAVER! Achei que já tivesse configurado isso, então continuei pensando que era outra coisa ...
Tiago111
2
Observe que isso é específico para um determinado banco de dados que você está usando. Não abrange toda a instalação.
fooquency de
1
Coloquei um pg_dump de volta e tive o mesmo problema. Minha extensão postgis coloca seus dados em um SCHEME personalizado, chamado postgis. Eu precisava executar o seguinte comando e tudo estava bem novamente:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman
23

Se a extensão Postgis for carregada, então seu SQL talvez não encontre o tipo de geometria por causa da falta do caminho de pesquisa para o esquema público.

Experimentar

SET search_path = ..., public;

na primeira linha do seu scsript. (substitua ... pelos outros caminhos de pesquisa necessários)

Ludwig
fonte
22

Você pode fazer isso no terminal:

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

Para fazer o psql parar no primeiro erro, use -v ON_ERROR_STOP=1(que está desativado por padrão , e é por isso que você vê muitos erros). Por exemplo:

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

O erro real é algo como "não foi possível carregar a biblioteca X", que pode variar em sua situação. Como uma suposição, tente este comando antes de instalar o script sql:

ldconfig

(pode ser necessário prefixar com, sudodependendo do seu sistema). Este comando atualiza os caminhos para todas as bibliotecas do sistema, como GEOS.

Mike T
fonte
5

Você deve habilitar a extensão em seu banco de dados.

psql my_database -c "CREATE EXTENSION postgis;"

Baptiste Donaux
fonte
5

Este erro também pode ocorrer se você tentar usar tipos postgis em outro esquema em vez de public.

Se você estiver criando seu próprio esquema, usando o postgis 2.3 ou superior e encontrar este erro, faça o seguinte conforme indicado aqui :

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;

Em seguida, você pode continuar a usar as funcionalidades pós-gis.

Leonardo Kuffo
fonte
3

Você também precisa garantir que o usuário com o qual está tentando usar a extensão postgis tenha acesso ao esquema onde o postgis está configurado (que nos tutoriais que li é chamado de 'postgis').

Acabei de ter esse erro, que foi resolvido porque eu só tinha dado acesso ao banco de dados a um novo usuário. No banco de dados que criei, executei:

grant all on schema postgis to USERNAME; 

E isso resolveu esse erro

mozboz
fonte
1

As respostas aqui podem resolver seu problema, no entanto, se você já tem postgis habilitado em seu banco de dados, o problema pode ser que você está tentando restaurar uma tabela postgis (com uma coluna geométrica) em um esquema diferente de onde sua extensão postgis está habilitada. No pgAdmin você pode clicar na extensão postgis e ver qual esquema está especificado. Se você estiver tentando restaurar uma tabela com coluna geométrica em um esquema diferente, poderá obter este erro.

Resolvi isso alterando minha extensão postgis - no entanto, não tenho certeza se essa era necessariamente a melhor maneira de fazer isso. Tudo o que sei é que me permitiu restaurar a mesa.

jase81
fonte
até o Postgis versão 2.3, você poderia mover a extensão para outro esquema que resolveu esse problema para mim algumas vezes
Daniël Tulp
0

Ou...

cursor.execute('create extension postgis')

em seu programa python, usando um cursor atual de psycopg2.

softweyr
fonte
0

Primeiro, certifique-se de ter (compatível com a versão pg: psql -V) o postgis instalado:

sudo apt install postgis postgresql-9.6-postgis-2.3

Antes da criação das tabelas, adicione:

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