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 comoVARCHAR(100). Colunas declaradas comoTEXT, ou sem tamanho, viramTEXT, que no PostgreSQL não custa nada a mais e pode ser chave ou indexado. INTEGERviraBIGINT. Os inteiros do SQLite têm 64 bits, enquanto oINTEGERdo PostgreSQL tem 32 bits; por isso, o DDL sugerido usaBIGINT.- Decimais mantêm a precisão.
DECIMAL(10,2)é sugerido comoNUMERIC(10,2). Um decimal declarado sem precisão viraNUMERIC, 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 é
DATEouTIMESTAMP, 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 CONFLICTna chave.

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 oCOPYbiná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_atou 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
- Abra o arquivo do banco SQLite e conecte no PostgreSQL.
- Escolha a tabela de origem (ou um SELECT, como no exemplo da data juliana) e a tabela de destino.
- Escolha a coluna-chave.
- 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 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.