Migração de dados de PostgreSQL para SQL Server

Migrate · · 4 min de leitura

Vai levar tabelas do PostgreSQL para o SQL Server? O dbSlice copia os dados por um app Windows ou pela linha de comando, mantém o SQL Server sincronizado enquanto o PostgreSQL ainda está no ar e compara os dois lados chave a chave antes da troca.

Migrar de PostgreSQL para SQL Server: o que muda no destino

Se a tabela não existe no SQL Server, o dbSlice para e mostra um CREATE TABLE traduzido para o SQL Server, para o seu DBA revisar e rodar. Por padrão, ele não cria nada nos seus bancos. Estes são os tipos do PostgreSQL que pedem uma decisão do lado do SQL Server:

  • NUMERIC sem precisão. O PostgreSQL aceita uma coluna numeric sem limite; o SQL Server para em 38 dígitos. Ela é sugerida como DECIMAL(38,10), e uma precisão declarada acima de 38, como numeric(50,2), é limitada a 38. Confira os valores reais e ajuste precisão e escala para caberem antes de rodar o CREATE TABLE.
  • timestamptz. Chega em UTC e é sugerido como DATETIME2, sem o offset. Declare DATETIMEOFFSET se a aplicação precisar, ou mantenha a convenção de UTC. O time with time zone também perde o fuso.
  • boolean, uuid, bytea. Esses viram sem surpresa BIT, UNIQUEIDENTIFIER e VARBINARY(MAX).
  • text e varchar sem tamanho. Viram NVARCHAR(MAX). Dê um tamanho onde puder, porque uma coluna NVARCHAR(MAX) não pode ser chave nem coluna de índice comum.
  • json e jsonb. Chegam como texto em NVARCHAR(MAX). O SQL Server os lê com JSON_VALUE e OPENJSON.
  • Arrays, enums, interval, inet e outros tipos só do PostgreSQL. Não têm equivalente no SQL Server e são sugeridos como NVARCHAR(MAX). Use um SELECT como origem e converta, por exemplo SELECT id, array_to_string(tags, ',') AS tags, status::text AS status, … FROM orders, ou leve os arrays para uma tabela filha.
  • Nomes em minúsculas. O PostgreSQL passa para minúsculas os nomes sem aspas. Escolha você mesmo os nomes de tabela e coluna do SQL Server no CREATE TABLE; o dbSlice mapeia as colunas pelo nome, então mantenha os nomes batendo.
  • serial e colunas identity. O SQL Server só aceita ids explícitos com Keep identity, que exige permissão de ALTER na tabela e é confirmado na tela antes. Sem essa opção, o SQL Server gera ids novos; então não use o id como chave da sincronia.
  • O Upsert roda como MERGE e as cargas em massa usam SqlBulkCopy, com triggers e constraints verificados.
Aba Synchronize do dbSlice

Como o dbSlice controla a carga

  • Lê o PostgreSQL em lotes pequenos, para o banco em uso continuar atendendo os usuários.
  • Casa as linhas por uma chave que você escolhe. Modos: Initial load, depois Upsert, Insert new, Update only ou incremental por coluna (updated_at ou o id da sequence).
  • Confere antes de gravar com o Record Diff e as conferências na tela, e prova o resultado com o Compare e a lista completa de chaves divergentes.
  • Mascara no caminho as cópias de desenvolvimento e teste, mantendo chaves e chaves estrangeiras intactas.
  • Exportar em vez de carregar: quando você só precisa de um arquivo, o mesmo app exporta uma tabela do PostgreSQL para CSV, JSON, XML ou HTML.

Avalie antes: relatório gratuito →

Passo a passo: converter uma tabela de PostgreSQL para SQL Server

  1. Conecte no PostgreSQL e no SQL Server.
  2. Escolha a tabela de origem (ou um SELECT, como no exemplo do array) e a tabela de destino.
  3. Escolha a coluna-chave, e ligue Keep identity se os ids precisarem continuar iguais.
  4. Escolha o modo: Initial load, depois Upsert ou Insert new.
  5. Rode o Record Diff e depois a cópia, ou salve como job para a CLI e o Agendador de Tarefas do Windows.

Mover dados entre PostgreSQL e SQL Server, com qualquer um dos dois como origem

O mesmo app move dados no outro sentido: veja SQL Server para PostgreSQL e a rotina noturna em Sincronizar SQL Server com PostgreSQL. Ele também cobre MariaDB para SQL Server e MySQL para SQL Server. Vindo do Oracle? Veja Oracle para SQL Server. Para MySQL ou MariaDB? Veja PostgreSQL para MySQL.

Perguntas frequentes

O dbSlice converte funções, triggers ou views?

Não. Ele move dados; o código PL/pgSQL precisa ser reescrito em T-SQL.

Preciso de replicação lógica ou extensões no PostgreSQL?

Não. O dbSlice lê as tabelas com consultas comuns.

As execuções incrementais copiam as exclusões?

Não. Rode o Compare ou uma recarga antes da troca.

Existe versão gratuita?

Sim, na Microsoft Store: ela conecta, navega, compara e exporta para CSV. Gravar num destino exige uma licença Desktop ou Server.

Ainda não usa o dbSlice?
Experimente a versão gratuita da Microsoft Store: ela conecta, navega pelos dados, compara estruturas e exporta para CSV.

Experimente grátis Veja as demonstrações

Em produção há mais de 6 anos · Garantia de 14 dias · Roda na sua máquina