Renomear a tabela postGIS e atualizar o GeoServer?

9

Quero renomear uma das minhas tabelas postGIS. No entanto, quando faço isso aplicando uma simples

ALTER TABLE old_name RENAME TO new_name;

Os dados espaciais, como eu o entendo, não são atualizados com o novo nome. Primeiro, essas referências podem ser corrigidas executando a função:

SELECT probe_geometry_columns()

A tabela em si está boa depois disso? Ou outras medidas também devem ser tomadas? Segundo, como atualizo o GeoServer para encontrar essa nova tabela? A partir de agora, se eu executar os comandos acima e editar as informações da camada no GeoServer para apontar para o novo nome ... Ainda recebo um erro (o GeoServer ainda tenta encontrá-lo sob o nome antigo). Exatamente, onde o nome da camada deve ser alterado no GeoServer?

Mimo
fonte

Respostas:

4

Para renomear a tabela, você precisará alterar o nome nos metadados de dois lugares. Primeiro no PostGIS, depois na configuração do Geoserver.

Para alterar o PostGIS, você pode atualizar diretamente as geometry_columns. Embora probe_geometries tenha o efeito de inserir essa entrada nas colunas de geometria, ele também terá o efeito de DESCREVER o esquema de todas as tabelas e inserir as entradas de colunas de geometria ausentes. Se você tem muitas tabelas, isso pode ficar caro, por que não atualizar a tabela geometry_columns diretamente?

Para atualizar o servidor geográfico, você tem várias opções. Certamente você pode fazê-lo manualmente através da GUI, mas tenho a sensação de que deseja automatizá-lo. Escrever um script de shell que edite os arquivos de configuração na pasta de instalação do geoserver e reinicie o geoserver, mas esse também é o longo caminho para fazer as coisas. Eu recomendaria que você usasse a API de configuração REST do geoserver, que permite manipular as configurações da camada por meio de chamadas RESTful .

Atualizar:

Caso as "colunas da geometria de atualização" não sejam óbvias, faça o seguinte:

UPDATE geometry_columns set f_table_name = 'my_new_table_name' where f_table_name = 'my_old_table_name';

Atualize 8 anos (!!!) depois (2018):

Como algumas pessoas mencionadas abaixo, após o PostGIS 2.0, as tabelas de metadados são atualizadas automaticamente após a instrução ALTER.

Ragi Yaser Burhum
fonte
Perdoe minha ignorância, mas como sou muito novo no PostGIS. Como exatamente atualizo geometry_columns? Entendi que a execução da função probe_ (sem nenhum parâmetro) faz a mesma coisa?
Mimo 12/10
11
Veja a implementação em probe_geometry_columns trac.osgeo.org/postgis/changeset/7548 Ele está percorrendo todas as tabelas do banco de dados, descobrindo se o esquema tem a cadeia "geometrytype" e inserindo um novo registro se a entrada necessária não existir em geometry_columns. No entanto, os registros órfãos são deixados como estão. Então, por que não fazer: UPDATE geometry_columns SET f_table_name = 'new_table_name' em que f_table_name = 'old_table_name'
Ragi Yaser Burhum
isto mostraNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche
você deseja ver isso agora: docs.geoserver.org/stable/en/user/rest/api/index.html
Ragi Yaser Burhum
7

Observe que no PostGIS 2.0+, tudo o que você precisa fazer é o normal

ALTER TABLE old_name RENAME TO new_name;

A entrada na visualização geometry_columns (ou geography_columns) também será atualizada.

Shane
fonte
3
SELECT Probe_Geometry_Columns();

é um utilitário útil.

Primeiro, quando anexamos uma coluna geométrica a uma tabela existente com

SELECT AddGeometryColumn('my_table', 'geo_column', 1234, 'MULTIPOINT', 2);

estamos alimentando a função de tudo o que é necessário para fixar a coluna da geometria de tipo (geo_column) na tabela especificada (minha_tabela) e escrever os detalhes importantes como SRID (1234), tipo de geometria (MULTIPOINT) e número de dimensões (2) para a tabela geometry_columns. Em essência, é uma ALTER e três ATUALIZAÇÕES.

A criação de colunas de geometria por outros meios (carregados do shapefile, selecionados em CREATE TABLE AS, etc.) pode levar a tabelas espaciais invisíveis para aplicativos externos, embora funcionem perfeitamente no banco de dados. Sem os detalhes corretos armazenados em geometry_columns, os valores reais da geometria aparecem como cadeias de caracteres sem sentido para aplicativos que procuram pontos projetados, linhas ou polígonos.

A chamada da função de análise verifica cada coluna do tipo geometria, adicionando novos valores a geometry_columns e relatando conflitos.

Voltando à sua pergunta, o GeoServer não acredita que a tabela renomeada contenha dados espaciais se a mudança de nome não for refletida em geometry_columns. Outra coisa a considerar é que a função de análise cria um registro duplicado refletindo o novo nome da tabela, mas não se livra do registro original - outro possível problema para o GeoServer.

Tudo o que foi dito, sugiro que você: 1) execute o probe e exclua imediatamente o registro antigo; ou 2) acompanhe sua alteração de nome com um ALTER em geometry_columns para alterar o valor f_table_name.

Desculpe pela palavra, mas espero que ajude.

rec.thegeom
fonte
Obrigado por sua resposta. Estou começando a entender melhor o postGIS agora. Ainda assim, estou um pouco inseguro sobre as etapas necessárias que precisam ser tomadas. Antes de tudo, devo executar a alteração de nome e depois o probe ()? Como altero as geometry_columns?
Mimo 12/10
A maneira mais simples de alterar as geometry_columns é abrir o pgAdmin, clicar com o botão direito do mouse na tabela, selecionar visualizar dados, selecionar visualizar todas as linhas, clicar na célula que contém o nome antigo da tabela e digitar o novo nome da tabela. ou, UPDATE geometry_columns SET f_table_name = 'new_table_name' WHERE f_schema_name = 'schema_name' AND f_table_name = 'old_table_name'
rec.thegeom
1

Não sei o que SELECT probe_geometry_columns () faz, mas você pode verificar facilmente a tabela geometry_columns para ver se o seu novo nome de tabela está lá ou se ainda está apontando para o antigo.

Suspeito que você precise recarregar o repositório GeoServer para garantir que "observe" as alterações. Alternativamente, uma parada e partida o fará.

Ian Turton
fonte
O que você quer dizer com "recarregar a loja GeoServer"?
Mimo 10/10
Na página de status ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ), há um botão de recarga.
Ian Turton
Obrigado. No entanto, a recarga não funcionou. Ainda recebo um erro do GeoServer que reclama por não encontrar a camada renomeada. Ele ainda tenta encontrá-lo sob o nome antigo.
Mimo
você alterou a definição da camada para apontar para o novo nome da tabela?
Ian Turton