Rinominare la tabella postGIS e aggiornare GeoServer?


9

Voglio rinominare una delle mie tabelle postGIS. Tuttavia, quando lo faccio applicando un semplice

ALTER TABLE old_name RENAME TO new_name;

I dati spaziali, a quanto ho capito, non vengono aggiornati con il nuovo nome. Innanzitutto, è possibile correggere questi riferimenti eseguendo la funzione:

SELECT probe_geometry_columns()

La tabella stessa è OK dopo questo? O dovrebbero essere prese anche altre misure? In secondo luogo, come posso aggiornare GeoServer in modo che trovi questa nuova tabella? A partire da ora, se eseguo i comandi precedenti e modifico le informazioni sul layer sul GeoServer per puntare al nuovo nome ... Ottengo ancora un errore (GeoServer prova ancora a trovarlo con il vecchio nome). Esattamente, dove dovrebbe essere cambiato il nome del layer sul GeoServer?

Risposte:


4

Per rinominare la tabella dovrai cambiare il nome nei metadati di due posti. Prima su PostGIS, poi sulla configurazione del Geoserver.

Per cambiare quello di PostGIS, puoi aggiornare direttamente geomet_columns. Sebbene probe_geometries avrà l'effetto di inserire quella voce nelle colonne della geometria, avrà anche l'effetto di DESCRIVERE lo schema di tutte le tabelle e inserire eventuali voci mancanti nelle colonne della geometria. Se hai molte tabelle, questo può diventare costoso, quindi perché non aggiornare direttamente la tabella geometry_columns?

Per l'aggiornamento del geoserver hai varie opzioni. Certamente puoi farlo manualmente attraverso la GUI, ma ho la sensazione che tu voglia automatizzarlo. Scrivere uno script di shell che modifica i file di configurazione nella cartella di installazione del geoserver e riavviare il geoserver, ma è anche il lungo modo di fare le cose. Ti consiglierei di usare l'API di configurazione REST del geoserver che ti consente di manipolare le configurazioni del layer tramite chiamate RESTful .

Aggiornare:

Nel caso in cui le "colonne della geometria di aggiornamento" non siano ovvie, procedere come segue:

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

Aggiornamento 8 anni (!!!) dopo (2018):

Come alcune persone menzionate di seguito, dopo PostGIS 2.0, le tabelle dei metadati vengono aggiornate automaticamente dopo l'istruzione ALTER.


Perdonate la mia ignoranza, ma poiché sono molto nuovo in PostGIS. Come aggiorno esattamente geomet_columns? Ho capito bene che eseguire la funzione probe_ (senza parametri) fa la stessa cosa?
Mimo,

1
Guarda l'implementazione da probe_geometry_columns trac.osgeo.org/postgis/changeset/7548 Sta attraversando ogni singola tabella nel db, scoprendo se lo schema ha la stringa "geometrytype" e inserendo un nuovo record se la voce richiesta non esiste in geometry_columns. Tuttavia, i record orfani vengono lasciati così come sono. Quindi perché non farlo: AGGIORNAMENTO geometry_columns SET f_table_name = 'new_table_name' dove f_table_name = 'old_table_name'
Ragi Yaser Burhum

questo mostraNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche il


7

Nota che in PostGIS 2.0+, tutto ciò che devi fare è il normale

ALTER TABLE old_name RENAME TO new_name;

Anche la voce nella vista geometry_columns (o geography_columns) verrà aggiornata.


3
SELECT Probe_Geometry_Columns();

è una comoda utility.

Innanzitutto, quando aggiungiamo una colonna geometrica a una tabella esistente con

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

stiamo fornendo alla funzione tutto ciò di cui ha bisogno per fissare la colonna della geometria del tipo (geo_column) alla tabella specificata (my_table) e scrivere i dettagli importanti come SRID (1234), il tipo di geometria (MULTIPOINT) e il numero di dimensioni (2) in la tabella geometry_columns. In sostanza, è un ALTER e tre AGGIORNAMENTI.

La creazione di colonne geometriche con altri mezzi (caricati da shapefile, selezionati in CREATE TABLE AS, ecc.) Può portare a tabelle spaziali invisibili ad applicazioni esterne, sebbene funzionino perfettamente all'interno del database. Senza i giusti dettagli memorizzati in geometria_colonne, i valori della geometria effettiva vengono visualizzati come stringhe di caratteri senza senso per le applicazioni che cercano punti, linee o poligoni proiettati.

La chiamata alla funzione probe controlla ogni colonna della geometria del tipo, aggiungendo nuovi valori a geometry_columns e segnalando conflitti.

Tornando alla tua domanda, GeoServer non crede che la tabella rinominata contenga dati spaziali se la modifica del nome non si riflette in geometry_columns. Qualcos'altro da considerare è che la funzione probe crea un record duplicato che riflette il nome della nuova tabella ma non elimina il record originale, un altro potenziale blocco per GeoServer.

Detto questo, ti suggerirei: 1) eseguire il probe quindi eliminare immediatamente il vecchio record; oppure 2) segui la modifica del tuo nome con un ALTER su geometry_columns per cambiare il valore f_table_name.

Ci scusiamo per la prolissità, ma spero che sia d'aiuto.


Grazie per la risposta. Sto cominciando a capire meglio PostGIS ora. Tuttavia, non sono sicuro dei passi necessari che devono essere presi. Prima di tutto dovrei eseguire la modifica del nome, quindi il probe ()? Come posso modificare geomet_columns?
Mimo,

Il modo più semplice per apportare la modifica in geometry_columns è aprire pgAdmin, fare clic con il pulsante destro del mouse sulla tabella, selezionare Visualizza dati, selezionare Visualizza tutte le righe, fare clic nella cella contenente il vecchio nome della tabella e digitare il nuovo nome della tabella. oppure, AGGIORNAMENTO Geometria_colonne SET f_table_name = 'nome_tabella_FILE' DOVE f_schema_name = 'nome_schema' E nome_tabella = 'nome_tabella_data' '
rec.thegeom

1

Non sono sicuro di ciò che SELECT SELECT_geometry_columns () fa, ma puoi facilmente controllare la tabella geometry_columns per vedere se il tuo nuovo nome di tabella è presente o se sta ancora puntando a quello vecchio.

Ho il sospetto che sia necessario ricaricare l'archivio GeoServer per assicurarsi che "noti" le modifiche. In alternativa, uno stop e start lo faranno.


Cosa intendi con "ricaricare il negozio GeoServer"?
Mimo,

Nella pagina di stato ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) è presente un pulsante di ricarica.
Ian Turton

Grazie. Tuttavia, la ricarica non ha funzionato. Ricevo ancora un errore GeoServer che si lamenta di non trovare il livello rinominato. Cerca ancora di trovarlo con il vecchio nome.
Mimo,

hai modificato la definizione del livello per puntare al nuovo nome della tabella?
Ian Turton
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.