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:
NUMERICsem precisão. O PostgreSQL aceita uma colunanumericsem limite; o SQL Server para em 38 dígitos. Ela é sugerida comoDECIMAL(38,10), e uma precisão declarada acima de 38, comonumeric(50,2), é limitada a 38. Confira os valores reais e ajuste precisão e escala para caberem antes de rodar oCREATE TABLE.timestamptz. Chega em UTC e é sugerido comoDATETIME2, sem o offset. DeclareDATETIMEOFFSETse a aplicação precisar, ou mantenha a convenção de UTC. Otime with time zonetambém perde o fuso.boolean,uuid,bytea. Esses viram sem surpresaBIT,UNIQUEIDENTIFIEReVARBINARY(MAX).textevarcharsem tamanho. ViramNVARCHAR(MAX). Dê um tamanho onde puder, porque uma colunaNVARCHAR(MAX)não pode ser chave nem coluna de índice comum.jsonejsonb. Chegam como texto emNVARCHAR(MAX). O SQL Server os lê comJSON_VALUEeOPENJSON.- Arrays, enums,
interval,inete outros tipos só do PostgreSQL. Não têm equivalente no SQL Server e são sugeridos comoNVARCHAR(MAX). Use um SELECT como origem e converta, por exemploSELECT 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. seriale 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
MERGEe as cargas em massa usamSqlBulkCopy, com triggers e constraints verificados.

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_atou 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
- Conecte no PostgreSQL e no SQL Server.
- Escolha a tabela de origem (ou um SELECT, como no exemplo do array) e a tabela de destino.
- Escolha a coluna-chave, e ligue Keep identity se os ids precisarem continuar iguais.
- Escolha o modo: Initial load, depois Upsert ou Insert new.
- 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.