Cambiar el nombre de la tabla postGIS y actualizar el GeoServer?

9

Quiero cambiar el nombre de una de mis tablas postGIS. Sin embargo, cuando hago esto aplicando un simple

ALTER TABLE old_name RENAME TO new_name;

Los datos espaciales, según tengo entendido, no se actualizan con el nuevo nombre. Primero, ¿pueden corregirse estas referencias ejecutando la función:

SELECT probe_geometry_columns()

¿La tabla en sí está bien después de esto? ¿O deberían tomarse otras medidas también? En segundo lugar, ¿cómo actualizo GeoServer para que encuentre esta nueva tabla? A partir de ahora, si ejecuto los comandos anteriores y edito la información de la capa en el GeoServer para que apunte al nuevo nombre ... Todavía recibo un error (GeoServer todavía intenta encontrarlo con el nombre anterior). Exactamente, ¿dónde se debe cambiar el nombre de la capa en el GeoServer?

Mimo
fuente

Respuestas:

4

Para cambiar el nombre de la tabla, deberá cambiar el nombre en los metadatos de dos lugares. Primero en PostGIS, luego en la configuración de Geoserver.

Para cambiar el PostGIS, puede actualizar directamente las geometry_columns. Aunque probe_geometries tendrá el efecto de insertar esa entrada en columnas de geometría, también tendrá el efecto de DESCRIBIR el esquema de todas las tablas e insertar las entradas de columnas de geometría faltantes. Si tiene muchas tablas, esto puede ser costoso, entonces, ¿por qué no simplemente actualizar la tabla geometry_columns directamente?

Para actualizar geoserver tienes varias opciones. Ciertamente, puede hacerlo manualmente a través de la GUI, pero tengo la sensación de que desea automatizarlo. Escribir un script de shell que edite los archivos de configuración en la carpeta de instalación de geoserver y reiniciar geoserver, pero esa es también la forma más larga de hacer las cosas. Le recomendaría que use la API de configuración REST de geoserver que le permite manipular las configuraciones de capa a través de llamadas RESTful .

Actualizar:

En caso de que las "columnas de geometría de actualización" no sean obvias, haga lo siguiente:

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

Actualización 8 años (!!!) más tarde (2018):

Como algunas personas mencionadas a continuación, después de PostGIS 2.0, las tablas de metadatos se actualizan automáticamente después de la declaración ALTER.

Ragi Yaser Burhum
fuente
Disculpe mi ignorancia, pero como soy muy nuevo en PostGIS. ¿Cómo actualizo exactamente geometry_columns? ¿Te he entendido bien que ejecutar la función probe_ (sin ningún parámetro) hace lo mismo?
Mimo
1
Mire la implementación de probe_geometry_columns trac.osgeo.org/postgis/changeset/7548 Está revisando todas las tablas de la base de datos, encontrando si el esquema tiene la cadena "geometrytype" e insertando un nuevo registro si la entrada requerida no existe en geometry_columns. Sin embargo, los registros huérfanos se dejan como están. Entonces, ¿por qué no simplemente hacer: ACTUALIZAR geometry_columns SET f_table_name = 'new_table_name' donde f_table_name = 'old_table_name'
Ragi Yaser Burhum el
esto muestraNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche
desea ver esto ahora: docs.geoserver.org/stable/en/user/rest/api/index.html
Ragi Yaser Burhum
7

Tenga en cuenta que en PostGIS 2.0+, todo lo que tiene que hacer es lo normal

ALTER TABLE old_name RENAME TO new_name;

La entrada en la vista geometry_columns (o geography_columns) también se actualizará.

Shane
fuente
3
SELECT Probe_Geometry_Columns();

Es una práctica utilidad.

Primero, cuando agregamos una columna de geometría a una tabla existente con

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

estamos alimentando la función todo lo que necesita para agregar la columna de geometría de tipo (geo_column) a la tabla especificada (my_table) y escribimos los detalles importantes como SRID (1234), tipo de geometría (MULTIPOINT) y número de dimensiones (2) en la tabla geometry_columns. En esencia, es una ALTERACIÓN y tres ACTUALIZACIONES.

Crear columnas de geometría por otros medios (cargados desde un archivo de forma, seleccionados en CREAR TABLA COMO, etc.) puede conducir a tablas espaciales que son invisibles para las aplicaciones externas, aunque funcionan bien dentro de la base de datos. Sin los detalles correctos almacenados en geometry_columns, los valores de geometría reales aparecen como cadenas de caracteres sin sentido para las aplicaciones que buscan puntos, líneas o polígonos proyectados.

Al llamar a la función de sonda, se comprueba cada columna de geometría de tipo, agregando nuevos valores a geometry_columns e informando conflictos.

Volviendo a su pregunta, GeoServer no cree que la tabla renombrada contenga datos espaciales si el cambio de nombre no se refleja en geometry_columns. Otra cosa a tener en cuenta es que la función de sonda crea un registro duplicado que refleja el nuevo nombre de la tabla pero no elimina el registro original, otro posible bloqueo para GeoServer.

Dicho todo esto, le sugiero que: 1) ejecute la sonda e inmediatamente elimine el registro anterior; o 2) haga un seguimiento de su cambio de nombre con ALTER en geometry_columns para cambiar el valor de f_table_name.

Perdón por la palabrería, pero espero que ayude.

rec.thegeom
fuente
Gracias por su respuesta. Estoy empezando a entender mejor postGIS ahora. Aún así, estoy un poco inseguro de los pasos necesarios que deben tomarse. En primer lugar, ¿debería realizar el cambio de nombre y luego la sonda ()? ¿Cómo modifico las geometry_columns?
Mimo
La forma más sencilla de realizar el cambio en geometry_columns es abrir pgAdmin, hacer clic con el botón derecho en la tabla, seleccionar ver datos, seleccionar ver todas las filas, hacer clic en la celda que contiene el nombre de la tabla anterior y escribir el nuevo nombre de la tabla. o, ACTUALIZAR 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

No estoy seguro de lo que hace SELECT probe_geometry_columns (), pero puede verificar fácilmente la tabla geometry_columns para ver si su nuevo nombre de tabla está allí o si todavía está apuntando al anterior.

Sospecho que necesita volver a cargar la tienda GeoServer para asegurarse de que "note" los cambios. Alternativamente, una parada y un comienzo lo harán.

Ian Turton
fuente
¿Qué quiere decir con "volver a cargar la tienda GeoServer"?
Mimo
En la página de estado ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) hay un botón de recarga.
Ian Turton
Gracias. Sin embargo, la recarga no funcionó. Todavía recibo un error de GeoServer que se queja de no encontrar la capa renombrada. Todavía trata de encontrarlo con el antiguo nombre.
Mimo
¿Cambiaste la definición de capa para apuntar al nuevo nombre de la tabla?
Ian Turton