Usando esquema diferente de público no PostGIS?

21

Atualmente, estou configurando uma nova instalação do PostGIS 2.0.2 e PostgreSQL 9.1.6 no Ubuntu. Recentemente, encontrei algumas informações indicando que o uso do esquema público para armazenar todos os dados não é uma boa ideia.

Por esse motivo, configurei um esquema chamado data e me tornei o proprietário, mas é uma boa ideia?

Minhas preocupações são:

  1. Além de definir o proprietário, talvez seja necessário prestar atenção às coisas na guia Privilégios ao criar esse novo esquema (por meio do pgAdmin III);
  2. Posso não obter os mesmos benefícios armazenando meus dados no esquema público e despejando todos os dados em um esquema separado antes de fazer um backup / restauração (isso economizaria algumas pressionamentos de tecla ao usar ogr2ogr); e
  3. Eu posso ter problemas por não ter as tabelas e visualizações PostGIS padrão no meu novo esquema de dados (elas estão no esquema público no mesmo banco de dados).
Paulo
fonte
1
Confira a nova resposta aqui gis.stackexchange.com/a/270522/6052
Evan Carroll
3
Sim, ainda é válido. O ponto principal é que é mais limpo, pois você separa os dados do usuário dos dados e funções do sistema.
John Powell
Eu não sou usuário do PostGIS, mas suspeito que a melhor resposta para sua pergunta agora pode ser gis.stackexchange.com/a/270522/115, portanto, se você concordar, sugiro que você mova sua marca de seleção Aceitar.
PolyGeo
1
Esta pergunta deve ser duas perguntas. A resposta aceita não responde à pergunta como está escrita. Essa pergunta deve ser reaberta, pois NÃO é uma duplicata desta pergunta, que está perguntando se os objetos PostGIS podem funcionar com objetos que não estão no publicesquema. Essa outra pergunta é sobre a instalação dos objetos de extensão PostGIS em um esquema diferente de public. Estas são duas coisas diferentes!
Kenny Evitt

Respostas:

7

Agora isso é abordado no site oficial em uma página intitulada Mover a extensão PostGIS para um esquema diferente . O método correto é instalar a extensão no public. Esta é a única opção. A extensão não oferece mais suporte à realocação. O próximo passo é executar os seguintes comandos (copiados do site),

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;
Evan Carroll
fonte
2
Isso NÃO responde à pergunta como está escrita; NÃO deve ser a resposta aceita. Está perguntando claramente sobre "não ter as tabelas e visualizações PostGIS padrão no meu novo dataesquema (elas estão no publicesquema no mesmo banco de dados)". Essa resposta é útil e é o que eu estava procurando, mas não está diretamente relacionada à pergunta.
Kenny Evitt
20

Quando você ativa espacialmente um banco de dados PostGIS, as funções relevantes, a tabela SRS e as visualizações são colocadas no esquema público, como você declara. Isso não significa que todas ou algumas de suas próprias tabelas espaciais precisam estar no mesmo esquema público. O PostGIS ainda funcionará em todos os dados espaciais nos "novos" esquemas.

De fato, geralmente coloco minhas tabelas específicas de aplicativos em um esquema separado. Dessa forma, se você precisar fazer uma atualização de versão principal para o PostGIS, poderá manter os backups e restaurações da tabela específica do aplicativo como um procedimento separado daquele que substitui as ferramentas espaciais.

Então, acho que você está indo bem. Por fim, caso você ainda não o tenha feito, é uma boa ideia adicionar o novo esquema ao caminho da pesquisa:

ALTER DATABASE my_db SET search_path = gc, public;

Martin F
fonte
Obrigado Martin. Isso significa que eu posso usar funções espaciais em tabelas em um esquema personalizado que não seja "público"?
alextc
Como você adiciona dados a outro esquema, ou seja. não public? Adicionando dados com por exemplo. shp2psqlpara test.tableainda coloca os dados em public?
knutole
@knutole. Como mencionei, usei o ArcCatalog para importar / novas classes de recursos. Não tenho certeza se você pode usar shp2psql para adicionar dados a um esquema personalizado que não seja público.
alextc
1
Essa deve ser a resposta aceita.
precisa saber é o seguinte
12
  1. Uma das estratégias organizacionais possíveis que você pode criar com esquemas é permitir que um usuário corra desenfreado em um esquema, mas não consiga estragar as coisas em outro. Portanto, se você deseja usar esquemas dessa maneira, isso pode ser feito na guia de privilégios do pgAdmin. Mas não é necessário que você faça isso; portanto, se você quiser apenas manter os mesmos privilégios em vários esquemas, tudo bem.

  2. Com base nos artigos aos quais você vinculou, o problema de manter tudo em público é que, ao despejar dados, é provável que você misture tabelas e relacionamentos do sistema com seus dados. Se você mover todos os seus dados para um novo esquema, não precisará se preocupar com isso novamente.

  3. Sem problemas. (Como prova, observe que você não precisa especificar public.spatial_ref_sys quando desejar pesquisar na tabela SRS.)

L_Holcombe
fonte
6

Uma dica adicional (talvez você já tenha se deparado com isso). Você provavelmente desejará adicionar o esquema "data" ao caminho de pesquisa padrão do usuário. Algo como:

ALTER USER <your_user_name> SET search_path=public,data,$USER; 

Em relação ao seu ponto 2, às vezes você precisa restaurar quando não tem mais acesso ao banco de dados original. (Esse é um dos motivos dos backups ...), para que você não tenha a chance de mover seus dados para um esquema separado quando realmente precisar deles.

Micha
fonte
1

Usamos o esquema público para resultados temporários de análise / tabela de desenvolvimento e, em seguida, entramos em esquemas mais organizados (pastas?) Para uso permanente.

DPSSpatial
fonte