Como posso transferir dados de um banco de dados PostGIS para outro?

8

Eu tenho muitos dados GIS em um banco de dados PostGIS antigo (versão "1.1.6") e preciso transferi-lo para outro banco de dados PostGIS ("POSTGIS =" 1.5.3 ").

Tentei criar um backup e restaurá-lo no novo banco de dados, mas ele gera várias centenas de erros.

Qual é a maneira correta de transferir os dados?

Devdatta Tengshe
fonte
Você já testou se funciona apesar dos erros?
RK
@RK Sim, funciona; Eu senti que poderia haver alguma corrupção sutil de dados, da qual eu talvez não estivesse ciente. Eu também queria saber se havia uma maneira melhor de transferir os dados sem erros.
Devdatta Tengshe

Respostas:

6

De acordo com Paul Ramsey :

Primeiro, para o aumento da versão do patch (por exemplo, XYZ -> XY (Z + 1)) no PostgreSQL e no PostGIS, você não precisa fazer nada além de instalar o novo software. Os dados podem permanecer no local e tudo funcionará.

Para aumentos menores de versão no PostgreSQL (por exemplo, XYZ -> X. (Y + 1) .Z), você precisa despejar e restaurar. Para aumentos menores da versão no PostGIS, você precisa fazer uma "atualização suave", o que significa deixar os dados no lugar, mas executar os scripts de atualização (por exemplo, postgis_upgrade_14_to_15.sql) depois de instalar a atualização do software.

Finalmente, para os aumentos de versões principais no PostgreSQL e PostGIS (por exemplo, XYZ -> (X + 1) .YZ), você precisa despejar e restaurar.

Você armazenou dados no esquema público?

O que me leva ao ponto real que quero enfatizar: você pode garantir a maior facilidade ao executar o dump e restaurar os dados do PostGIS se garantir que não armazena dados no esquema "público".

Nem tudo está perdido, se você armazenou dados no esquema público

"Mas Paul", você diz, "eu já tenho um despejo de banco de dados completo, isso significa que eu sou SOL?" Não, mas você precisará de um estômago forte. Primeiro, configure seu novo PostgreSQL. Crie um banco de dados em branco, carregue o PostGIS nele. Agora, carregue seu arquivo de backup nesse banco de dados. Você verá muitos erros. No entanto, esses erros serão causados ​​pela antiga função PostGIS e pelas definições de tipo do seu arquivo de despejo em conflito com as definições de tipo existentes no banco de dados. E como você deseja as novas definições, não as antigas, tudo bem. Sua carga, apesar de todos os ruídos e erros, deve realmente funcionar. Uma vez feito, você pode mover seus dados para um bom esquema separado, para que da próxima vez possa fazer uma restauração limpa e sem erros.

Você já testou se funciona apesar dos erros?

O site PostGIS também possui uma seção sobre a atualização do PostGIS .

RK
fonte
Então, basicamente, o esquema público é para tabelas temporárias?
nickves 28/09/12
3
Não. É apenas que o público "é onde as funções do PostGIS e as tabelas do sistema são instaladas; portanto, se você despejar esse esquema, obterá todas essas definições no despejo". O que é aceitável se você estiver mudando para outro banco de dados PostGIS com a mesma versão do original, mas pode ser um problema quando o banco de dados de definição for uma versão diferente. A nova versão pode ter diferentes definições de função que podem entrar em conflito com as do esquema público.
RK
2

Verifique as tabelas usuais e "tabelas com geometria" e use (no terminal shell / UNIX)

  • pg_dumppara exportar as tabelas usuais (importar com psql)
  • pgsql2shppara exportar as tabelas geográficas e shp2pgsqlimportar.

O último (pgsql2shp) é referente ao "bug" do pg_dump ao exportar versões "antigas para novas de dados PostGIS". Obviamente, se não houver bugs, você precisará apenas de pg_dump.

Verifique primeiro a recomendação do @RK, psql -f postgis_upgrade_1X_to_15.sql -d your_spatial_database... Em geral (nem sempre o bot) está ok ... O pgsql2shp é a ÚLTIMA opção.

Peter Krauss
fonte
1

Eu concordo com as outras respostas e usei o método pg_dump. Uma vantagem adicional é que você pode compactar o dump para um zip ou tar, por exemplo, e movê-lo para outro servidor, se necessário.

tjmgis
fonte
O pg_dump exporta os dados do PostGIS com alguns "bugs" ... o pgsql2shp exporta melhor as geometrias ao exportar versões antigas do postGIS para novas versões.
Peter Krauss