Sincronizar SQL Server com PostgreSQL

Sync · · 4 min de leitura

Mova os dados uma vez e depois mantenha o PostgreSQL em dia com o SQL Server: por um app Windows ou pela linha de comando, sem instalar agentes, ativar CDC nem mexer no SQL Server Agent.

Quando esta é a ferramenta certa

  • Uma réplica de leitura ou de relatórios em PostgreSQL que precisa acompanhar um sistema de registro em SQL Server.
  • Uma migração com virada longa: o SQL Server antigo continua no ar por semanas e o PostgreSQL precisa se atualizar toda noite até a troca.
  • Alimentar um banco analítico em PostgreSQL a partir de uma ou mais tabelas do SQL Server, num agendamento.

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

Aba Synchronize do dbSlice

Como uma sincronia funciona

  1. Escolha a tabela de origem ou um SELECT no SQL Server e a tabela de destino no PostgreSQL.
  2. Escolha a coluna-chave usada para casar as linhas. O dbSlice lê a origem em lotes pequenos, para um banco em uso continuar atendendo os usuários enquanto a sincronia roda.
  3. Escolha o que a execução faz no destino:
    ModoO que faz
    UpsertInsere as chaves novas e atualiza as que mudaram
    Insert newInsere só as chaves que faltam; as linhas existentes não são tocadas
    Initial loadInserts simples numa tabela vazia
    Update onlyAtualiza as linhas que já existem
    Full reloadEsvazia a tabela de destino e carrega de novo
  4. Opcional: mapeie colunas com nomes diferentes, acrescente um filtro WHERE, mascare valores sensíveis durante a cópia.
  5. Confira antes de gravar. O Record Diff compara as chaves dos dois lados (quantas são, quais faltam).
  6. Rode, ou salve como job e rode pela CLI ou pelo Agendador de Tarefas do Windows.

Execuções incrementais

Aponte o job para uma coluna que só cresce, como updated_at. Para um rowversion do SQL Server, use um SELECT de origem que o devolva como CAST(rv AS BIGINT) e aponte o job para essa coluna. Cada execução lembra o maior valor lido, e a seguinte só lê as linhas acima dele. Junto com o Upsert, uma atualização noturna lê o que mudou em vez da tabela inteira.

Exclusões no SQL Server não são detectadas por uma execução incremental. Se linhas são excluídas na origem, agende uma comparação completa periódica ou uma recarga completa.

O seu banco continua seu

Por padrão, o dbSlice só lê e grava linhas. Ele não cria tabelas, triggers nem objetos temporários nos seus bancos (o modo de gravação mais rápido, abaixo, é opcional). Se a tabela ainda não existe no PostgreSQL, o dbSlice para antes de gravar e mostra o script CREATE TABLE, traduzido do esquema do SQL Server, para o seu DBA revisar e rodar.

Velocidade, com as condições

As cargas iniciais e as recargas completas usam a carga em massa do PostgreSQL. Para o Upsert e o Insert new existe um modo de gravação mais rápido, que precisa de uma tabela temporária na sessão; ele vem desligado e você só o liga se o seu DBA permitir tabelas temporárias. No nosso teste de laboratório com esse modo ligado (SQL Server 2022 e PostgreSQL 17 no mesmo host, rede local de contêineres, sem outra carga, uma execução por caso), o dbSlice 2.3 sincronizou:

  • 10.000 linhas no modo Upsert em 0,4 s (~28.000 linhas/s);
  • 1.000.000 de linhas no modo Insert new em 10,6 s (~94.000 linhas/s).

Os seus números vão variar com a latência de rede entre os servidores, o disco, os índices, a largura das linhas e qualquer mascaramento ou transformação. Rode o teste de referência embutido nos seus servidores antes de planejar uma janela de virada.

O que o dbSlice não faz

  • Ele move dados, não código. Stored procedures, triggers, funções e T-SQL não são convertidos para PL/pgSQL. Use um conversor de código para essa parte e o dbSlice para os dados.
  • Não é replicação em tempo real. As execuções são jobs em lote (sob demanda ou agendados). Se você precisa de captura de mudanças em menos de um segundo, procure ferramentas de CDC por log.

Também serve para

A mesma tela sincroniza qualquer par entre SQL Server, PostgreSQL, Oracle, MySQL, MariaDB, Firebird, SQLite e InterSystems Caché/IRIS, e PostgreSQL para SQL Server no outro sentido. Para uma migração única, leia o guia de migração de SQL Server para PostgreSQL. Para SQL Server para MySQL ou MariaDB, veja a página dedicada.

Planejando a migração em si? →

Sincronizando a partir de um sistema em uso? →

Comparando ferramentas? dbSlice ou pgloader · alternativa ao DBConvert.

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