---
title: "Migrar PostgreSQL para SQLite no navegador"
description: "Migre um banco PostgreSQL para SQLite: converta um arquivo do pg_dump em um script com as mesmas tabelas, chaves e dados, e um relatório de cada mudança."
canonical: https://intosql.com/pt-br/postgresql-para-sqlite
last_updated: 2026-10-15
---

# Migrar PostgreSQL para SQLite no navegador

Solte um dump simples do pg_dump ou pg_dumpall, em .sql ou .sql.gz, e baixe um script do SQLite com as mesmas tabelas, chaves, índices e dados. Cada valor que o SQLite não aceita como está, e cada objeto que ele não traz, aparece no relatório.

[Guia de migração de PostgreSQL para SQLite](https://intosql.com/docs/migrations/postgresql-to-sqlite)

[Tipos de dados de PostgreSQL para SQLite](https://intosql.com/docs/types/postgresql-to-sqlite)

## O que muda do PostgreSQL para o SQLite

Cada linha é uma regra que o conversor aplica, com a linha do relatório que ele escreve quando a regra muda algo nos seus dados.

| No PostgreSQL | No SQLite | Linha do relatório |
| --- | --- | --- |
| boolean | INTEGER 0 ou 1 com um CHECK |  |
| varchar(n), char(n), text | VARCHAR(n) e TEXT, sem limite aplicado |  |
| numeric(p,s) past 15 digits and numeric without a precision | TEXT | `decimal_as_text` |
| money | NUMERIC | `type_replaced` |
| interval | TEXT com o texto do PostgreSQL | `type_replaced` |
| arrays (integer[], text[]...) | TEXT com um array JSON | `type_replaced` |
| ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types | TEXT com o texto do PostgreSQL | `type_replaced` |
| json, jsonb | TEXT |  |
| timestamp | DATETIME como texto ISO 8601 |  |
| timestamp with time zone | TIMESTAMP como texto ISO 8601 em UTC | `moments_as_utc` |
| time | TIME como texto |  |
| infinity, -infinity and BC dates | NULL | `date_out_of_range` |
| NaN and Infinity in numeric, real and double precision | NULL | `invalid_value_null` |
| NOT NULL columns with values that become NULL | NOT NULL removido | `not_null_relaxed` |
| enum types | TEXT com um CHECK dos rótulos |  |
| enum columns holding values outside their labels | TEXT sem CHECK | `enum_check_skipped` |
| uuid, inet, cidr, macaddr | TEXT |  |
| bytea | BLOB |  |
| bit(n), bit varying | INTEGER com o valor dos bits até 63 bits; dígitos em TEXT acima disso |  |
| oid, xid, cid | INTEGER com um CHECK de que não é negativo |  |
| citext and nondeterministic collations | comparação exata | `case_insensitive_collation` |
| serial, identity | INTEGER PRIMARY KEY AUTOINCREMENT, continuando depois do maior id |  |
| serial and identity columns that aren't the whole primary key | INTEGER sem contador | `counter_dropped` |
| sequences not owned by a column | não criada | `sequence_not_converted` |
| generated columns | GENERATED ALWAYS AS, STORED ou VIRTUAL como na origem |  |
| generated columns with functions SQLite lacks | uma coluna simples com os valores | `generated_not_translated` |
| defaults with functions SQLite lacks, and defaults from a sequence | sem valor padrão | `default_not_translated` |
| CHECK constraints | traduzido, dentro do CREATE TABLE |  |
| CHECK constraints with functions SQLite lacks | não criado | `check_skipped` |
| CHECK ... NOT VALID | não criado | `check_not_valid` |
| gin, gist, brin and hash indexes, partial and expression indexes | não criado | `index_skipped` |
| foreign keys | no CREATE TABLE, carregadas sem verificação, depois listadas por PRAGMA foreign_key_check |  |
| foreign keys to tables the dump doesn't create | não criada | `foreign_key_skipped` |
| partitioned tables | uma tabela com as linhas de todas as partições | `partitions_dropped` |
| schemas | um arquivo, tabelas com o nome do schema na frente | `schemas_merged` |
| views, functions, procedures, triggers, rules, policies, extensions and types | listados no relatório | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipos lidos dos valores | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | TEXT | `unknown_type` |
| text that isn't valid in its encoding | os bytes inválidos como o caractere de substituição | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiado como está | `mojibake_suspected` |

## Carregue o script no SQLite

O script cria as tabelas, copia as linhas e depois adiciona chaves, índices e chaves estrangeiras, então carrega rápido e para no primeiro erro.

```shell
sqlite3 -bail mydb.sqlite < postgresql.sqlite.sql
```

As chaves estrangeiras são declaradas em cada tabela e as linhas carregam com a verificação de chaves estrangeiras desligada. Depois o script lista cada linha que aponta para uma linha que não existe, em vez de falhar no meio do caminho.

Para um dump grande, carregue em um arquivo novo em um disco local. O script carrega tudo em uma transação com a sincronização desligada, então roda na velocidade do disco, e uma carga interrompida no meio não deixa tabelas incompletas.

A linha de comando carrega o arquivo direto em um banco SQLite, sem escrever um script. É grátis.

## Gere o dump do PostgreSQL para o melhor resultado

O conversor lê o que o dump contém. Estas opções mantêm mais dos seus dados nele:

- --format=plain, o padrão do pg_dump, escreve SQL. Um arquivo custom ou de diretório (-Fc, -Fd) vira SQL com pg_restore -f dump.sql, sem servidor de banco de dados.
- --no-owner --no-privileges deixam de fora papéis e permissões, que o conversor ignora de qualquer forma, então o dump fica menor.
- O pg_dumpall gera o dump de todos os bancos de dados em um arquivo; as tabelas de cada um recebem o nome dele, então nada colide.

## O que não é convertido

Visões, visões materializadas, funções, procedimentos, gatilhos, regras, políticas de segurança de linha, extensões e tipos são escritos na linguagem própria do PostgreSQL. Eles aparecem no relatório pelo nome, nunca são descartados em silêncio, para que você possa reescrevê-los para o SQLite.

## Perguntas sobre PostgreSQL para SQLite

### Meu dump é enviado?

Não. O conversor roda no seu navegador e lê o dump do seu disco em partes, então ele nunca sai do seu computador. O app para desktop e a linha de comando também convertem no seu computador.

### Qual o tamanho máximo do dump?

O conversor nunca guarda o dump inteiro na memória: ele lê o arquivo duas vezes, por intervalos, e escreve o script à medida que avança. Dumps de vários gigabytes são convertidos no navegador, no app para desktop e com a linha de comando.

### Ele lê arquivos do pg_dump -Fc?

Não diretamente: um arquivo custom é um formato binário. pg_restore -f dump.sql dump.backup o transforma no SQL simples que o conversor lê, sem se conectar a um servidor. O conversor avisa quando recebe um arquivo desses.

### De quais versões do PostgreSQL o dump pode vir?

Dumps escritos pelo pg_dump e pg_dumpall do PostgreSQL 10 em diante, com linhas em COPY ou INSERT. Cada dump de teste vem do PostgreSQL 13 e 18 e é comparado com a origem célula por célula.

### Os valores serial e identity são mantidos?

Uma coluna serial ou identity que é toda a chave primária da tabela vira INTEGER PRIMARY KEY AUTOINCREMENT, cada linha mantém seu id, e o próximo id continua depois do maior. Qualquer outra mantém seus valores sem contador, e o relatório avisa.

### O que acontece com arrays, enums e outros tipos do PostgreSQL?

Arrays viram arrays JSON, booleanos 0 e 1, enums texto com um CHECK dos rótulos, e timestamps com fuso horário texto em UTC. Numerics largos continuam exatos como texto. Ranges, tipos geométricos e tipos compostos mantêm o texto do PostgreSQL.

### E as funções, gatilhos e visões?

Eles aparecem no relatório pelo nome e não são convertidos, porque cada banco de dados os escreve na sua própria linguagem.

### Em quais versões do SQLite o script carrega?

SQLite 3.31 e posteriores. Cada dump de teste carrega no 3.31 e no 3.54 e para no primeiro erro se algo der errado.

## De PostgreSQL

- [PostgreSQL para PostgreSQL](https://intosql.com/pt-br/postgresql-para-postgresql)
- [PostgreSQL para MySQL](https://intosql.com/pt-br/postgresql-para-mysql)
- [PostgreSQL para MariaDB](https://intosql.com/pt-br/postgresql-para-mariadb)
- [PostgreSQL para SQL Server](https://intosql.com/pt-br/postgresql-para-sql-server)
- [PostgreSQL para Oracle](https://intosql.com/pt-br/postgresql-para-oracle)

## Para SQLite

- [MySQL para SQLite](https://intosql.com/pt-br/mysql-para-sqlite)
- [MariaDB para SQLite](https://intosql.com/pt-br/mariadb-para-sqlite)
- [SQL Server para SQLite](https://intosql.com/pt-br/sql-server-para-sqlite)
- [SQLite para SQLite](https://intosql.com/pt-br/sqlite-para-sqlite)
- [Oracle para SQLite](https://intosql.com/pt-br/oracle-para-sqlite)

## Guia e todos os pares

- [SQLite para PostgreSQL](https://intosql.com/pt-br/sqlite-para-postgresql)
- [Guia de migração de PostgreSQL para SQLite](https://intosql.com/docs/migrations/postgresql-to-sqlite)
- [Tipos de dados de PostgreSQL para SQLite](https://intosql.com/docs/types/postgresql-to-sqlite)
- [Todos os pares de bancos de dados](https://intosql.com/pt-br/migracao-de-banco-de-dados)
