¿Cómo puedo transferir datos de una base de datos PostGIS a otra?

8

Tengo bastantes datos SIG en una base de datos PostGIS anterior (versión "1.1.6") y necesito transferirlos a otra base de datos PostGIS ("POSTGIS =" 1.5.3 ").

Intenté crear una copia de seguridad y restaurarla en la nueva Base de Datos, pero arroja varios cientos de errores.

¿Cuál es la forma correcta de transferir los datos?

Devdatta Tengshe
fuente
¿Has probado si funciona a pesar de los errores?
RK
@RK Sí, funciona; Sentí que podría haber una corrupción sutil de datos, de la cual podría no estar al tanto. También me preguntaba si había una mejor manera de transferir los datos sin ningún error.
Devdatta Tengshe

Respuestas:

6

De acuerdo con Paul Ramsey :

Primero, para aumentar la versión del parche (por ejemplo, XYZ -> XY (Z + 1)) en PostgreSQL y PostGIS, no necesita hacer nada más que instalar el nuevo software. Los datos pueden permanecer en su lugar y todo funcionará.

Para los aumentos de versiones menores en PostgreSQL (por ejemplo, XYZ -> X. (Y + 1) .Z) necesita volcar y restaurar. Para aumentos menores de versión en PostGIS, debe realizar una "actualización suave", lo que significa dejar los datos en su lugar, pero ejecutar los scripts de actualización (por ejemplo, postgis_upgrade_14_to_15.sql) después de instalar la actualización de software.

Finalmente, para los aumentos de versiones principales en PostgreSQL y PostGIS (p. Ej. XYZ -> (X + 1) .YZ) necesita volcar y restaurar.

¿Guardaste datos en el esquema público?

Lo que me lleva al punto real que quiero destacar: puede garantizar la mayor facilidad para volcar y restaurar los datos de PostGIS si se asegura de no almacenar datos en el esquema "público".

Sin embargo, no todo se pierde si almacenó datos en el esquema público

"Pero Paul", dices, "ya tengo un volcado de base de datos completo, ¿eso significa que soy SOL?" No, pero necesitarás un estómago fuerte. Primero, configure su nuevo PostgreSQL. Cree una base de datos en blanco, cargue PostGIS en ella. Ahora, cargue su archivo de respaldo en esa base de datos. Verás muchos errores. Sin embargo, estos errores serán causados ​​por la antigua función PostGIS y las definiciones de tipo de su archivo de volcado en conflicto con las definiciones de tipo existentes en su base de datos. Y como quieres las nuevas definiciones, no las antiguas, está bien. Su carga, a pesar de todo el ruido y los errores, debería funcionar. Una vez hecho esto, puede mover sus datos a un esquema separado agradable, para que la próxima vez pueda hacer una restauración limpia y sin errores.

¿Has probado si funciona a pesar de los errores?

El sitio PostGIS también tiene una sección sobre cómo actualizar PostGIS .

RK
fuente
Entonces, ¿básicamente el esquema público es para tablas temporales?
nickves
3
No Es solo que el público "es donde se instalan las funciones de PostGIS y las tablas del sistema, por lo que si vuelca ese esquema obtendrá todas esas definiciones en su volcado". Lo cual está bien si se está mudando a otra base de datos PostGIS con la misma versión que la original, pero podría ser un problema cuando la base de datos de definición es una versión diferente. La nueva versión podría tener diferentes definiciones de funciones que podrían entrar en conflicto con las del esquema público.
RK
2

Verifique las tablas habituales y las "tablas con geometría", luego use (en el terminal shell / UNIX)

  • pg_dumppara exportar las tablas habituales (importar con psql)
  • pgsql2shppara exportar las tablas geográficas e shp2pgsqlimportar.

El último (pgsql2shp) es para el "error" de pg_dump al exportar versiones "antiguas a nuevas de datos PostGIS". Por supuesto, si no hay errores, solo necesita pg_dump.

Verifique primero la recomendación @RK, psql -f postgis_upgrade_1X_to_15.sql -d your_spatial_database... En general (bot no siempre) está bien ... El pgsql2shp es la ÚLTIMA opción.

Peter Krauss
fuente
1

Estoy de acuerdo con las otras respuestas y he usado el método pg_dump. Una ventaja adicional es que puede comprimir el volcado a un archivo zip o tar, por ejemplo, y moverlo a otro servidor si es necesario.

tjmgis
fuente
pg_dump exporta datos de PostGIS con algunos "errores" ... pgsql2shp exporta mejor las geometrías, al exportar versiones antiguas de postGIS a nuevas versiones.
Peter Krauss