Ajouter des fonctions spatiales PostGIS à un schéma personnalisé autre que «public» dans PostgreSQL

15

Récemment, j'ai créé une base de données PostGIS 2.0.3 sur un serveur de base de données PostgreSQL 9.1 à l'aide de pgAdmin. L'extension "PostGIS" a été trouvée installée dans "Extensions". Toutes les fonctions spatiales ont été ajoutées au schéma "public". C'est très bien.

Maintenant, je veux stocker toutes mes données dans un nouveau schéma appelé "gc". Cependant, comment puis-je installer toutes les fonctions spatiales dans ce schéma "gc"? Il n'y a pas de fonction unique dans le schéma. Cependant, lorsque j'ai essayé d'importer / de créer une nouvelle classe d'entités depuis ESRI ArcCatalog 10.1 vers ce schéma, cela a fonctionné! La classe d'entités peut être importée et affichée dans QGIS.

Quelqu'un pourrait-il me donner un conseil ou une idée à ce sujet?

Je suis nouveau sur PostgreSQL et PostGIS.

alextc
la source
Je viens de remarquer: déjà traité sur gis.stackexchange.com/questions/43187/…
Martin F
@MartinF Il y a une réponse (incomplète) à cette question à la question à laquelle vous avez lié, mais cette question pose vraiment quelque chose de très différent.
Kenny Evitt
Cette question pourrait également être intitulée "Installer PostGIS dans un schéma autre que public?".
Kenny Evitt

Réponses:

3

Voici des exemples de commandes pour installer l'extension PostGIS dans un gcschéma:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Voici des exemples de commandes pour déplacer PostGIS et ses objets vers un nouveau schéma pour la version 2.4.4 de PostGIS au cas où vous l'auriez déjà installé:

CREATE SCHEMA gc;

UPDATE pg_extension
SET extrelocatable = TRUE
WHERE extname = 'postgis';

ALTER EXTENSION postgis
SET SCHEMA gc;

ALTER EXTENSION postgis
UPDATE TO "2.4.4next";

ALTER EXTENSION postgis
UPDATE TO "2.4.4";

Ce n'est pas strictement nécessaire; juste utile:

ALTER DATABASE whatever
SET search_path = public,gc;
Kenny Evitt
la source
1

Kenny Evitt a déjà expliqué les choses les plus importantes. Néanmoins, voici quelques informations supplémentaires:

Postgresql possède des bases de données, des espaces de table et des schémas, et il est impossible d'effectuer des jointures d'une base de données à une autre, car elles sont strictement séparées. Une base de données peut avoir plusieurs schémas et il est possible de joindre quelque chose d'un schéma à un autre. Pour plus d'informations, consultez les documents:

Une autre possibilité de charger PostGIS dans votre schéma gc serait la suivante:

t=# create schema gc;
CREATE SCHEMA
t=# set search_path to gc;
SET
t=# create extension postgis;
CREATE EXTENSION

Je ne suis ni un expert du catalogue Arc ni de pgadmin, mais je suppose que l'une des trois possibilités suivantes s'est produite:

  1. Postgresql prend en charge nativement les types de données géométriques . Mais vous ne devriez pas faire confiance à cela dans Geo Contexts, car les métadonnées CRS ainsi que la fonctionnalité de transformation ne sont pas fournies. Tu as juste eu de la chance et rien ne s'est cassé.
  2. Arc Catalog, d'une manière ou d'une autre, après ne pas avoir trouvé d'extension PostGIS, l'a créée sans avertir l'utilisateur. Pour vérifier cela, vous pouvez consulter les tables existantes avant et après cette étape.

Dans psql, vous pouvez le faire en tapant:

\d
           List of Relations
 Schema |       Name        |   Type  | Owner 
--------+-------------------+---------+----------
 gc     | geography_columns | View    | postgres
 gc     | geometry_columns  | View    | postgres
 gc     | raster_columns    | View    | postgres
 gc     | raster_overviews  | View    | postgres
 gc     | spatial_ref_sys   | Table   | postgres

Si vous voyez cela, PostGIS a été installé comme une extension. La troisième possibilité serait qu'ArcCatalog fasse quelque chose comme ceci:

set search_path to $all_schemas;
import to gc;

Dans ce cas, vous avez également eu de la chance. Mais peut-être qu'ArcCatalog fait quelque chose de plus sophistiqué à la fin ...

Yorkie
la source
0

voici votre solution:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Si vous avez déjà installé l'extension postGIS dans votre schéma public et que vous souhaitez vous déplacer dans gc, écrivez le code suivant:

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA gc;
Tekson
la source