Migração de dados de SQL Server para PostgreSQL, com sincronia até a virada

Migrate · · 4 min de leitura

Vai migrar de SQL Server para PostgreSQL? O dbSlice copia as tabelas por um app Windows ou pela linha de comando, mantém o PostgreSQL sincronizado enquanto a aplicação antiga ainda está rodando e compara os dois lados chave a chave antes da troca.

Clique para ampliar.
Aba Synchronize do dbSlice: sincronia de SQL Server para PostgreSQL

dbSlice ou pgloader?

O pgloader é um carregador gratuito e open source que também lê o SQL Server e converte o esquema num só comando. O dbSlice é para equipes que querem uma interface Windows com prévia dos dados, execuções Upsert ou incrementais toda noite até a virada, uma comparação chave a chave antes da troca e cópias mascaradas para desenvolvimento e teste. Veja a página completa alternativa ao pgloader.

O que o dbSlice faz

  • Lê o SQL Server em lotes pequenos, para o banco em uso continuar atendendo os usuários.
  • Grava no PostgreSQL em massa com COPY nas cargas iniciais e completas.
  • Mostra o DDL do destino. Se a tabela não existe no PostgreSQL, o dbSlice para e mostra um CREATE TABLE traduzido do SQL Server para o seu DBA revisar e rodar. Por padrão, ele não cria nada nos seus bancos.
  • Protege os ids. Depois que as linhas são copiadas com os valores de IDENTITY, o dbSlice pode avançar a sequence do PostgreSQL para depois do maior id, ou mostrar o comando para o seu DBA rodar.
  • Exportar em vez de carregar: quando você só precisa de um arquivo, o mesmo app exporta uma tabela do SQL Server para CSV, JSON, XML ou HTML.

Migrar de SQL Server para PostgreSQL: cinco detalhes para planejar

1. datetimeoffset. É sugerido como TIMESTAMP, e os valores são gravados em UTC. Se a aplicação precisa do fuso, declare a coluna como TIMESTAMPTZ no CREATE TABLE.

2. bit. Vira BOOLEAN; então 1 e 0 chegam como true e false. Consultas que comparam com = 1 precisam mudar.

3. nvarchar(max), ntext e xml. São sugeridos como TEXT. O texto do PostgreSQL é Unicode, então o prefixo N não é necessário; declare XML você mesmo se consultar como XML.

4. rowversion / timestamp. É binário no SQL Server e é sugerido como BYTEA. Não é uma data: deixe fora da cópia, a menos que a aplicação o leia.

5. Maiúsculas e collation. O SQL Server costuma comparar texto sem diferenciar maiúsculas; o PostgreSQL, por padrão, diferencia. Planeje ILIKE, citext ou uma collation que não diferencie maiúsculas onde a aplicação depende disso.

Avalie antes: relatório gratuito →

Comparando ferramentas? Veja as melhores ferramentas para migrar SQL Server para PostgreSQL →

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

  1. Conecte no SQL Server e no PostgreSQL.
  2. Escolha a tabela de origem (ou um SELECT) e a tabela de destino.
  3. Escolha a coluna-chave usada para casar as linhas.
  4. Escolha o modo: Initial load na primeira vez, depois Upsert ou Insert new.
  5. Confira antes de gravar: o Record Diff compara as chaves dos dois lados; as conferências na tela rodam antes de qualquer gravação.
  6. Rode, ou salve como job e agende pela CLI. O Replicador copia uma lista de tabelas numa execução, as pais antes das filhas.

Mantenha os dois sincronizados até a virada

Agende um job Upsert toda noite. Com uma coluna que só cresce (updated_at ou o id IDENTITY), cada execução lê só as linhas acima do último valor visto. Exclusões não são detectadas pelas execuções incrementais; por isso, compare ou recarregue antes da troca. Mais sobre a rotina noturna: Sincronizar SQL Server com PostgreSQL.

Cópias mascaradas para desenvolvimento

O mesmo job pode ofuscar e-mails, documentos e outras colunas sensíveis no caminho, mantendo chaves e chaves estrangeiras intactas, para um banco de teste em PostgreSQL receber dados realistas sem os valores reais.

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

O mesmo app move dados no outro sentido: PostgreSQL para SQL Server. Ele também cobre SQL Server para MySQL, MariaDB, Oracle, Firebird, SQLite ou InterSystems IRIS. Veja também MySQL para PostgreSQL e Oracle para PostgreSQL.

Perguntas frequentes

O dbSlice converte stored procedures, triggers ou views?

Não. Ele move dados; o código T-SQL precisa ser reescrito para o PostgreSQL.

Preciso de CDC ou do SQL Server Agent?

Não. O dbSlice lê as tabelas com consultas comuns e roda como job pela própria CLI ou pelo Agendador de Tarefas do Windows.

Consigo conferir que nada está faltando antes da troca?

Sim. O Compare lê os dois lados chave a chave e salva a lista completa de chaves divergentes num arquivo.

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