---
title: "Migrar PostgreSQL a SQLite en tu navegador"
description: "Migra una base de datos PostgreSQL a SQLite: convierte un archivo de pg_dump en un script con las mismas tablas, claves y datos, y un informe de cada cambio."
canonical: https://intosql.com/es/postgresql-a-sqlite
last_updated: 2026-10-15
---

# Migrar PostgreSQL a SQLite en tu navegador

Suelta un volcado plano de pg_dump o pg_dumpall, en .sql o .sql.gz, y descarga un script de SQLite con las mismas tablas, claves, índices y datos. Cada valor que SQLite no puede guardar tal cual, y cada objeto que no admite, aparece en el informe.

[Guía de migración de PostgreSQL a SQLite](https://intosql.com/docs/migrations/postgresql-to-sqlite)

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

## Qué cambia de PostgreSQL a SQLite

Cada fila es una regla que aplica el convertidor, con la línea que escribe en el informe cuando la regla cambia algo en tus datos.

| En PostgreSQL | En SQLite | Línea del informe |
| --- | --- | --- |
| boolean | INTEGER 0 o 1 con un CHECK |  |
| varchar(n), char(n), text | VARCHAR(n) y TEXT, sin aplicar |  |
| numeric(p,s) past 15 digits and numeric without a precision | TEXT | `decimal_as_text` |
| money | NUMERIC | `type_replaced` |
| interval | TEXT con el texto de PostgreSQL | `type_replaced` |
| arrays (integer[], text[]...) | TEXT con un arreglo JSON | `type_replaced` |
| ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types | TEXT con el texto de PostgreSQL | `type_replaced` |
| json, jsonb | TEXT |  |
| timestamp | DATETIME como texto ISO 8601 |  |
| timestamp with time zone | TIMESTAMP como texto ISO 8601 en 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 | sin NOT NULL | `not_null_relaxed` |
| enum types | TEXT con un CHECK de sus etiquetas |  |
| enum columns holding values outside their labels | TEXT sin CHECK | `enum_check_skipped` |
| uuid, inet, cidr, macaddr | TEXT |  |
| bytea | BLOB |  |
| bit(n), bit varying | INTEGER con el valor de los bits hasta 63 bits; dígitos en TEXT si son más |  |
| oid, xid, cid | INTEGER con un CHECK de que no sea negativo |  |
| citext and nondeterministic collations | comparación exacta | `case_insensitive_collation` |
| serial, identity | INTEGER PRIMARY KEY AUTOINCREMENT, siguiendo después del id más alto |  |
| serial and identity columns that aren't the whole primary key | INTEGER sin contador | `counter_dropped` |
| sequences not owned by a column | no se crea | `sequence_not_converted` |
| generated columns | GENERATED ALWAYS AS, STORED o VIRTUAL como en el origen |  |
| generated columns with functions SQLite lacks | una columna simple con los valores | `generated_not_translated` |
| defaults with functions SQLite lacks, and defaults from a sequence | sin valor predeterminado | `default_not_translated` |
| CHECK constraints | traducido, en línea en CREATE TABLE |  |
| CHECK constraints with functions SQLite lacks | no se crea | `check_skipped` |
| CHECK ... NOT VALID | no se crea | `check_not_valid` |
| gin, gist, brin and hash indexes, partial and expression indexes | no se crea | `index_skipped` |
| foreign keys | en CREATE TABLE, cargadas sin comprobar, luego listadas por PRAGMA foreign_key_check |  |
| foreign keys to tables the dump doesn't create | no se crea | `foreign_key_skipped` |
| partitioned tables | una tabla con las filas de todas las particiones | `partitions_dropped` |
| schemas | un archivo, con el nombre del esquema delante de cada tabla | `schemas_merged` |
| views, functions, procedures, triggers, rules, policies, extensions and types | listados en el informe | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipos leídos de los 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 | los bytes incorrectos como carácter de reemplazo | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | se copia tal cual | `mojibake_suspected` |

## Carga el script en SQLite

El script crea las tablas, copia las filas y luego agrega claves, índices y claves foráneas, así que carga rápido y se detiene en el primer error.

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

Las claves foráneas se declaran en cada tabla y las filas se cargan con la comprobación de claves foráneas desactivada. Luego el script lista cada fila que apunta a una fila que no existe, en lugar de fallar a medias.

Para un volcado grande, carga en un archivo nuevo en un disco local. El script carga todo en una sola transacción con la sincronización desactivada, así que va a la velocidad del disco, y una carga que se detiene a medias no deja tablas incompletas.

La línea de comandos carga el archivo directo en una base de datos SQLite, sin escribir un script. Es gratis.

## Haz el volcado de PostgreSQL para el mejor resultado

El convertidor lee lo que contiene el volcado. Estas opciones conservan más de tus datos en él:

- --format=plain, el formato predeterminado de pg_dump, escribe SQL. Un archivo custom o de directorio (-Fc, -Fd) pasa a SQL con pg_restore -f dump.sql, sin un servidor de base de datos.
- --no-owner --no-privileges dejan fuera los roles y los permisos, que el convertidor omite de todos modos, así que el volcado es más pequeño.
- pg_dumpall vuelca todas las bases de datos en un archivo; las tablas de cada una llevan su nombre, así que nada choca.

## Qué no se convierte

Las vistas, vistas materializadas, funciones, procedimientos, disparadores, reglas, políticas de seguridad de filas, extensiones y tipos se escriben en el lenguaje propio de PostgreSQL. Aparecen en el informe por nombre, nunca se descartan en silencio, para que puedas reescribirlos para SQLite.

## Preguntas sobre PostgreSQL a SQLite

### ¿Se sube mi volcado?

No. El convertidor se ejecuta en tu navegador y lee el volcado de tu disco por partes, así que nunca sale de tu computadora. La app de escritorio y la línea de comandos también convierten en tu computadora.

### ¿Qué tan grande puede ser el volcado?

El convertidor nunca tiene todo el volcado en memoria: lee el archivo dos veces, por rangos, y escribe el script sobre la marcha. Los volcados de varios gigabytes se convierten en el navegador, en la app de escritorio y con la línea de comandos.

### ¿Lee archivos de pg_dump -Fc?

No directamente: un archivo custom tiene formato binario. pg_restore -f dump.sql dump.backup lo pasa al SQL plano que lee el convertidor, sin conectarse a un servidor. El convertidor lo indica cuando recibe un archivo así.

### ¿De qué versiones de PostgreSQL puede venir el volcado?

Volcados escritos por pg_dump y pg_dumpall de PostgreSQL 10 en adelante, con filas COPY o INSERT. Cada volcado de prueba viene de PostgreSQL 13 y 18 y se compara con su origen celda por celda.

### ¿Se conservan los valores serial e identity?

Una columna serial o identity que es toda la clave primaria de la tabla se vuelve INTEGER PRIMARY KEY AUTOINCREMENT, cada fila conserva su id y el siguiente id sigue después del más alto. Cualquier otra conserva sus valores sin contador, y el informe lo dice.

### ¿Qué pasa con los arreglos, los enum y otros tipos de PostgreSQL?

Los arreglos se vuelven arreglos JSON, los booleanos 0 y 1, los enum texto con un CHECK de sus etiquetas, y los timestamps con zona horaria texto en UTC. Los numeric anchos siguen exactos como texto. Los rangos, los tipos geométricos y los tipos compuestos conservan el texto de PostgreSQL.

### ¿Qué pasa con las funciones, los disparadores y las vistas?

Aparecen en el informe por nombre y no se convierten, porque cada base de datos los escribe en su propio lenguaje.

### ¿En qué versiones de SQLite carga el script?

SQLite 3.31 y posteriores. Cada volcado de prueba carga en 3.31 y 3.54, y se detiene en el primer error si algo sale mal.

## Desde PostgreSQL

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

## Hacia SQLite

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

## Guía y todos los pares

- [SQLite a PostgreSQL](https://intosql.com/es/sqlite-a-postgresql)
- [Guía de migración de PostgreSQL a SQLite](https://intosql.com/docs/migrations/postgresql-to-sqlite)
- [Tipos de datos de PostgreSQL a SQLite](https://intosql.com/docs/types/postgresql-to-sqlite)
- [Todos los pares de bases de datos](https://intosql.com/es/migracion-de-bases-de-datos)
