web-dev-qa-db-fra.com

Postgis installation: le type "geometry" n'existe pas

J'essaie de créer une table avec Postgis. Je le fais par cette page . Mais lorsque j'importe un fichier postgis.sql, j'obtiens de nombreuses erreurs:

ERROR:  type "geometry" does not exist

Est-ce que quelqu'un sait comment puis-je résoudre ce problème?

72
yetty

J'ai eu le même problème, mais il a été corrigé en exécutant le code suivant

CREATE EXTENSION postgis;

En détail, 

  1. ouvrir pgAdmin
  2. sélectionnez (cliquez) votre base de données
  3. cliquez sur l'icône "SQL" dans la barre
  4. lancez "CREATE EXTENSION postgis;" code
140
Krishna Sapkota

Pour que psql s'arrête à la première erreur, utilisez -v ON_ERROR_STOP=1 (qui est off par défaut , c'est pourquoi vous voyez beaucoup d'erreurs). Par exemple:

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

L'erreur réelle est quelque chose comme "Impossible de charger la bibliothèque X", qui peut varier selon votre situation. Devinez, essayez cette commande avant d'installer le script SQL:

ldconfig

(vous devrez peut-être préfixer avec Sudo en fonction de votre système). Cette commande met à jour les chemins d'accès à toutes les bibliothèques système, telles que GEOS.

18
Mike T

Si Postgis-Extension est chargé, votre code SQL ne trouve peut-être pas le type de géométrie car le chemin de recherche du schéma public est manquant.

Essayer 

SET search_path = ..., public;

dans la première ligne de votre scsript. (remplacez ... par les autres chemins de recherche requis)

16
ludwig

Vous pouvez le faire depuis le terminal:

psql mydatabasename -c "CREATE EXTENSION postgis";
16
Brendan Nee

Vous devez activer l'extension sur votre base de données.

psql my_database -c "CREATE EXTENSION postgis;"

3
Baptiste Donaux

Vous devez également vous assurer que l'utilisateur pour lequel vous essayez d'utiliser l'extension postgis a accès au schéma où postgis est configuré (ce qui, dans les tutoriels que j'ai lus, s'appelle 'postgis').

Je viens d'avoir cette erreur, et cela a été résolu car je n'avais donné à un nouvel utilisateur que l'accès à la base de données. Dans la base de données que j'avais créée, j'ai exécuté:

grant all on schema postgis to USERNAME; 

Et cela a résolu cette erreur

1
mozboz

Les réponses fournies ici peuvent résoudre votre problème. Toutefois, si vous avez déjà activé postgis sur votre base de données, il se peut que vous essayiez de restaurer une table postgis (avec une colonne géométrique) dans un schéma autre que celui où votre extension postgis est activée. Dans pgAdmin, vous pouvez cliquer sur l'extension postgis et voir quel schéma est spécifié. Si vous essayez de restaurer une table avec une colonne de géométrie dans un schéma différent, vous risquez d'obtenir cette erreur.

J'ai résolu ce problème en modifiant l'extension de mon postgis - mais je ne suis pas sûr que ce soit nécessairement la meilleure façon de le faire. Tout ce que je sais, c'est que cela m'a permis de restaurer la table. 

1
jase81

Ou...

cursor.execute('create extension postgis')

dans votre programme python, en utilisant un curseur actuel de psycopg2.

0
softweyr

Cette erreur peut également se produire si vous essayez d'utiliser des types postgis sur un autre schéma plutôt que public.

Si vous créez votre propre schéma, utilisez Postgis 2.3 ou une version ultérieure et rencontrez cette erreur, procédez comme suit comme indiqué ici :

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;

Ensuite, vous pouvez utiliser les fonctionnalités du postgis.

0
Leonardo Kuffo

Tout d’abord, assurez-vous que postgis est bien installé

Sudo apt install postgis postgresql-9.6-postgis-2.3

Juste avant la création des tables, ajoutez:

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