Aggiungi le funzioni spaziali PostGIS a uno schema personalizzato diverso da "pubblico" in PostgreSQL


15

Di recente, ho creato un database PostGIS 2.0.3 su un server di database PostgreSQL 9.1 usando pgAdmin. L'estensione "PostGIS" è stata trovata installata in "Estensioni". Tutte le funzioni spaziali sono state aggiunte allo schema "pubblico". Va bene.

Ora voglio archiviare tutti i miei dati in un nuovo schema chiamato "gc". Tuttavia, come posso rendere tutte le funzioni spaziali installate in quello schema "gc"? Non esiste una singola funzione nello schema. Tuttavia, quando ho provato a importare / nuova una classe di funzionalità da ESRI ArcCatalog 10.1 a questo schema, ha funzionato! La classe di entità geografiche potrebbe essere importata e visualizzata in QGIS.

Qualcuno potrebbe darmi qualche suggerimento o idea a riguardo?

Sono nuovo di PostgreSQL e PostGIS.


Appena notato: già trattato a gis.stackexchange.com/questions/43187/…
Martin F,

@MartinF V'è un (incompleta) risposta a questa domanda in domanda a cui si è collegato, ma questa domanda è veramente chiedere qualcosa di molto diverso.
Kenny Evitt,

Questa domanda potrebbe anche essere intitolata "Installare PostGIS in uno schema diverso dal pubblico?".
Kenny Evitt,

Risposte:


3

Ecco alcuni comandi di esempio per l'installazione dell'estensione PostGIS in uno gcschema:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Ecco alcuni comandi di esempio per spostare PostGIS e i suoi oggetti in un nuovo schema per la versione 2.4.4 di PostGIS nel caso in cui sia già stato installato:

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

Questo non è strettamente necessario; solo utile:

ALTER DATABASE whatever
SET search_path = public,gc;

1

Kenny Evitt ha già spiegato le cose più importanti. Tuttavia, ecco alcune informazioni aggiuntive:

Postgresql ha database, tablespace e schemi ed è impossibile eseguire join da un database all'altro, poiché sono strettamente separati. Un database può avere più di uno schema ed è possibile unire qualcosa da uno schema a un altro. Per ulteriori informazioni, consultare i documenti:

Un'altra possibilità per caricare PostGIS nel tuo schema gc sarebbe la seguente:

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

Non sono un esperto di Arc Catalog né di pgadmin, ma presumo che sia avvenuta una delle tre possibilità seguenti:

  1. Postgresql supporta i tipi di dati geometrici in modo nativo . Ma non dovresti fidarti di questo in Geo Contexts, perché non vengono forniti metadati CRS e funzionalità di trasformazione. Sei stato solo fortunato e niente si è rotto.
  2. Arc Catalog in qualche modo, dopo aver trovato un'estensione PostGIS, l'ha creata senza avvisare l'utente. Per verificarlo, puoi guardare le tabelle esistenti prima e dopo quel passaggio.

In psql, puoi farlo digitando:

\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

Se vedi questo, PostGIS è stato installato come estensione. La terza possibilità sarebbe che ArcCatalog faccia qualcosa del genere:

set search_path to $all_schemas;
import to gc;

In questo caso, sei anche stato fortunato. Ma forse ArcCatalog alla fine fa qualcosa di più sofisticato ...


0

ecco la tua soluzione:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Se hai già installato l'estensione postGIS nel tuo schema pubblico e vuoi spostarti in gc, scrivi il seguente codice:

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

ALTER EXTENSION postgis 
  SET SCHEMA gc;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.