Migração de dados de SQLite para PostgreSQL

Migrate · · 4 min de leitura

Vai levar o arquivo SQLite de um app para o PostgreSQL? O dbSlice lê o banco SQLite por um app Windows ou pela linha de comando, grava as tabelas no PostgreSQL e compara os dois lados chave a chave antes da troca. Rode de novo num agendamento enquanto o app ainda grava no SQLite.

Migrar de SQLite para PostgreSQL: o que muda no destino

Se a tabela não existe no PostgreSQL, o dbSlice para e mostra um CREATE TABLE traduzido para o PostgreSQL, para o seu DBA revisar e rodar. Por padrão, ele não cria nada nos seus bancos. O dbSlice lê o tipo que você declarou no SQLite, com tamanho e precisão. O PostgreSQL é mais rígido que o SQLite com os valores; por isso, confira estes pontos:

  • Texto mantém o tamanho declarado. Um VARCHAR(100) do SQLite é sugerido como VARCHAR(100). Colunas declaradas como TEXT, ou sem tamanho, viram TEXT, que no PostgreSQL não custa nada a mais e pode ser chave ou indexado.
  • INTEGER vira BIGINT. Os inteiros do SQLite têm 64 bits, enquanto o INTEGER do PostgreSQL tem 32 bits; por isso, o DDL sugerido usa BIGINT.
  • Decimais mantêm a precisão. DECIMAL(10,2) é sugerido como NUMERIC(10,2). Um decimal declarado sem precisão vira NUMERIC, que guarda todos os dígitos.
  • Booleanos. O SQLite os guarda como 0 e 1. Declare a coluna como BOOLEAN, e o dbSlice converte 0/1 em false/true.
  • Datas guardadas como texto ou número. Quando a coluna no PostgreSQL é DATE ou TIMESTAMP, o dbSlice converte texto ISO e Unix time no caminho. Números de dia juliano (REAL) precisam de um SELECT na origem: SELECT id, datetime(created_jd) AS created_at, … FROM orders.
  • Valores misturados numa coluna. Números guardados como texto são convertidos quando o destino é numérico. Um valor que não é número de jeito nenhum para a linha com o erro real; limpe-o num SELECT antes.
  • Ids e sequences. Os ids do SQLite são copiados como estão. Depois da cópia, a sequence do PostgreSQL precisa passar do maior id: marque Adjust the id generator afterwards (exige ALTER), ou rode o comando que o dbSlice mostra.
  • O Upsert roda como INSERT … ON CONFLICT na chave.
Aba Synchronize do dbSlice

Como o dbSlice controla a carga

  • Lê o arquivo SQLite ordenado pela chave.
  • Cargas rápidas com COPY: o Initial load e o Insert new usam o COPY binário do PostgreSQL. Se um valor não combina com o tipo da coluna, nada daquele lote é gravado e o dbSlice grava de novo com INSERTs comuns, para mostrar o erro real.
  • 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 row id).
  • 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 SQLite para CSV, JSON, XML ou HTML.

Passo a passo: converter uma tabela de SQLite para PostgreSQL

  1. Abra o arquivo do banco SQLite e conecte no PostgreSQL.
  2. Escolha a tabela de origem (ou um SELECT, como no exemplo da data juliana) e a tabela de destino.
  3. Escolha a coluna-chave.
  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 SQLite e PostgreSQL, com qualquer um dos dois como origem

No outro sentido, o dbSlice exporta uma tabela do PostgreSQL para um arquivo de banco SQLite, para uma cópia portátil ou um app offline. Para SQL Server, veja SQLite para SQL Server. Vai migrar um sistema maior? Veja MySQL e MariaDB para PostgreSQL.

Perguntas frequentes

O SQLite precisa de servidor ou driver?

Não. O dbSlice abre o arquivo do banco diretamente.

Triggers e views são convertidos?

Não. O dbSlice move dados; views podem ser origem por meio de um SELECT.

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