Agregue funciones espaciales de PostGIS a un esquema personalizado que no sea "público" en PostgreSQL

15

Recientemente, creé una base de datos PostGIS 2.0.3 en un servidor de base de datos PostgreSQL 9.1 usando pgAdmin. La extensión "PostGIS" se encontró instalada en "Extensiones". Todas las funciones espaciales se agregaron al esquema "público". Esta bien.

Ahora quiero almacenar todos mis datos en un nuevo esquema llamado "gc". Sin embargo, ¿cómo puedo hacer que todas las funciones espaciales estén instaladas en ese esquema "gc"? No hay una sola función en el esquema. Sin embargo, cuando intenté importar / crear una nueva clase de entidad de ESRI ArcCatalog 10.1 a este esquema, ¡funcionó! La clase de entidad podría importarse y mostrarse en QGIS.

¿Alguien podría darme algún consejo o idea al respecto?

Soy nuevo en PostgreSQL y PostGIS.

alextc
fuente
Acabo de notar: ya se trató en gis.stackexchange.com/questions/43187/…
Martin F
@MartinF No es una respuesta (incompleta) a esta pregunta en la pregunta a la que se conectó, pero esa pregunta está pidiendo realmente algo muy diferente.
Kenny Evitt
Esta pregunta también podría titularse "¿Instalar PostGIS en un esquema que no sea público?".
Kenny Evitt

Respuestas:

3

Aquí hay ejemplos de comandos para instalar la extensión PostGIS en un gcesquema:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Aquí hay ejemplos de comandos para mover PostGIS y sus objetos a un nuevo esquema para la versión 2.4.4 de PostGIS en caso de que ya lo haya instalado:

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";

Esto no es estrictamente necesario; solo útil:

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

Kenny Evitt ya explicó las cosas más importantes. Sin embargo, aquí hay información adicional:

Postgresql tiene bases de datos, espacios de tablas y esquemas, y es imposible realizar uniones de una base de datos a otra, ya que están estrictamente separadas. Una base de datos puede tener más de un esquema, y ​​es posible unir algo de un esquema a otro. Para más información, mira los documentos:

Otra posibilidad para cargar PostGIS en su esquema gc sería la siguiente:

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

No soy un experto en Arc Catalog ni en pgadmin, pero supongo que sucedió una de las siguientes tres posibilidades:

  1. Postgresql admite tipos de datos geométricos de forma nativa . Pero no debe confiar en esto en contextos geográficos, porque no se proporcionan metadatos de CRS ni la funcionalidad de transformación. Tuviste suerte y nada se rompió.
  2. Arc Catalog de alguna manera, después de no encontrar una extensión PostGIS, la creó sin notificar al Usuario. Para verificar eso, puede mirar las tablas existentes antes y después de ese paso.

En psql, puede hacer esto escribiendo:

\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 ve esto, PostGIS se ha instalado como una extensión. La tercera posibilidad sería que ArcCatalog haga algo como esto:

set search_path to $all_schemas;
import to gc;

En este caso, también tienes suerte. Pero tal vez, ArcCatalog hace algo más sofisticado al final ...

yorkie
fuente
0

Aquí está tu solución:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Si ya instaló la extensión postGIS en su esquema público y desea moverse en gc, escriba el siguiente código:

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

ALTER EXTENSION postgis 
  SET SCHEMA gc;
Tekson
fuente