Adicione funções espaciais do PostGIS a um esquema personalizado diferente de "public" no PostgreSQL


15

Recentemente, criei um banco de dados PostGIS 2.0.3 em um servidor de banco de dados PostgreSQL 9.1 usando o pgAdmin. A extensão "PostGIS" foi encontrada instalada em "Extensões". Todas as funções espaciais foram adicionadas ao esquema "público". Isso é bom.

Agora eu quero armazenar todos os meus dados em um novo esquema chamado "gc". No entanto, como faço para instalar todas as funções espaciais nesse esquema "gc"? Não há uma única função no esquema. No entanto, quando tentei importar / novas classes de recursos do ESRI ArcCatalog 10.1 para esse esquema, funcionou! A classe do recurso pode ser importada e exibida no QGIS.

Alguém poderia me dar alguma dica ou idéia sobre isso?

Eu sou novo no PostgreSQL e no PostGIS.


Acabei de notar: já tratado em gis.stackexchange.com/questions/43187/…
Martin F

@MartinF Não é um (incompleto) resposta a esta pergunta com a pergunta para a qual você ligou, mas essa pergunta está realmente pedindo algo muito diferente.
precisa saber é o seguinte

Esta pergunta também pode ser intitulada "Instalando o PostGIS em um esquema que não seja público?".
precisa saber é o seguinte

Respostas:


3

Aqui estão exemplos de comandos para instalar a extensão PostGIS em um gcesquema:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Aqui estão exemplos de comandos para mover o PostGIS e seus objetos para um novo esquema da versão 2.4.4 do PostGIS, caso você já o tenha 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";

Isso não é estritamente necessário; apenas útil:

ALTER DATABASE whatever
SET search_path = public,gc;

1

Kenny Evitt já explicou as coisas mais importantes. No entanto, aqui estão algumas informações adicionais:

O Postgresql possui bancos de dados, espaços de tabela e esquemas, e é impossível realizar junções de um banco de dados para outro, porque são estritamente separados. Um banco de dados pode ter mais de um esquema e é possível associar algo de um esquema para outro. Para mais informações, consulte os documentos:

Outra possibilidade de carregar o PostGIS no seu esquema gc seria a seguinte:

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

Não sou especialista no Arc Catalog nem no pgadmin, mas presumo que uma das três possibilidades a seguir tenha acontecido:

  1. O Postgresql suporta tipos de dados geométricos nativamente . Mas você não deve confiar nisso nos Contextos Geográficos, porque os metadados do CRS e a funcionalidade de transformação não são fornecidos. Você acabou de ter sorte e nada quebrou.
  2. De alguma forma, o Arc Catalog, depois de não encontrar uma extensão PostGIS, a criou sem notificar o Usuário. Para verificar isso, você pode examinar as tabelas existentes antes e depois dessa etapa.

No psql, você pode fazer isso 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 você vir isso, o PostGIS foi instalado como uma extensão. A terceira possibilidade seria que o ArcCatalog faça algo assim:

set search_path to $all_schemas;
import to gc;

Nesse caso, você também teve sorte. Mas talvez, o ArcCatalog faça algo mais sofisticado no final ...


0

aqui está a sua solução:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Se você já instalou a extensão postGIS em seu esquema público e deseja mover-se no gc, escreva o seguinte código:

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

ALTER EXTENSION postgis 
  SET SCHEMA gc;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.