PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como migrar um banco de dados PostgreSQL para um SQLServer?


Você deve encontrar algumas informações úteis na resposta aceita nesta página do Serverfault:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.

Se você conseguir converter o esquema sem os dados, poderá encurtar as etapas para os dados usando este comando:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql

Este carregamento será bastante lento, mas o --column-inserts A opção gera as instruções INSERT mais genéricas possíveis para cada linha de dados e deve ser compatível.

EDIT:Seguem sugestões sobre como converter o esquema:

Eu começaria despejando o esquema, mas removendo qualquer coisa que tenha a ver com propriedade ou permissões. Isso deve ser suficiente:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql

Edite este arquivo para adicionar a linha BEGIN TRANSACTION; para o início e ROLLBACK TRANSACTION; até o fim. Agora você pode carregá-lo e executá-lo em uma janela de consulta no SQL Server. Se você receber algum erro, certifique-se de ir até o final do arquivo, destacar a instrução ROLLBACK e executá-la (pressionando F5 enquanto a instrução estiver destacada).

Basicamente, você precisa resolver cada erro até que o script seja executado de forma limpa. Então você pode alterar a ROLLBACK TRANSACTION para COMMIT TRANSACTION e execute uma última vez.

Infelizmente, não posso ajudar com quais erros você pode ver, pois nunca passei do PostgreSQL para o SQL Server, apenas o contrário. Algumas coisas que eu esperaria serem um problema, no entanto (obviamente, NÃO uma lista exaustiva):
  • O PostgreSQL faz auto-incremento de campos vinculando um NOT NULL INTEGER campo para uma SEQUENCE usando um DEFAULT . No SQL Server, esta é uma IDENTITY coluna, mas eles não são exatamente a mesma coisa. Não tenho certeza se eles são equivalentes, mas se seu esquema original estiver cheio de campos "id", você pode ter alguns problemas. Não sei se o SQL Server tem CREATE SEQUENCE , então talvez seja necessário removê-los.
  • Funções de banco de dados/procedimentos armazenados não traduzem entre plataformas RDBMS. Você precisará remover qualquer CREATE FUNCTION instruções e traduza os algoritmos manualmente.
  • Tenha cuidado com a codificação do arquivo de dados. Eu sou uma pessoa do Linux, então não tenho ideia de como verificar a codificação no Windows, mas você precisa ter certeza de que o que o SQL Server espera é o mesmo que o arquivo que você está importando do PostgreSQL. pg_dump tem uma opção --encoding= que permitirá que você defina uma codificação específica. Parece que o Windows tende a usar a codificação UTF-16 de dois bytes para Unicode, onde o PostgreSQL usa UTF-8. Eu tive alguns problemas ao passar do SQL Server para o PostgreSQL devido à saída UTF-16, então valeria a pena pesquisar.
  • O tipo de dados PostgreSQL TEXT é simplesmente um VARCHAR sem comprimento máximo. No SQL Server, TEXT é... complicado (e obsoleto). Cada campo em seu esquema original declarado como TEXT precisará ser revisado para um tipo de dados apropriado do SQL Server.
  • O SQL Server tem tipos de dados extras para UNICODE dados. Eu não estou familiarizado o suficiente com ele para fazer sugestões. Estou apenas apontando que pode ser um problema.