Saltar al contenido
Inicio de IntoSQL

Convierte PostgreSQL a SQLite

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.

Tu archivo
sqlshop_2024_postgres.sqlArchivo de ejemplo, 6,2 kB
Tu base de datos

18 filas convertidas, 3 correcciones, ninguna rechazada

Mostrar

Tablas en shop_2024_postgres.sqlVolcado de PostgreSQL 18.6 · escrito por pg_dump · utf8mb4

  • customers8 filas2
    8 columnas
    idINTEGER not null
    nameTEXT not null
    emailTEXT not null
    countryVARCHAR(2) not null
    is_activeINTEGER not null
    tagsTEXT not null
    signed_upDATE
    created_atTIMESTAMP not null
  • orders10 filas1
    10 columnas
    idINTEGER not null
    customer_idINTEGER not null
    statusTEXT not null
    totalDECIMAL(10,2) not null
    itemsINTEGER not null
    ordered_atDATETIME not null
    shipped_atDATETIME
    noteTEXT
    detailsTEXT
    deliveryTEXT

Sin convertir

  • Vista paid_orders

Cada base de datos los escribe en su propio lenguaje. Reescríbelos para SQLite.

-- Written by IntoSQL from a PostgreSQL dump. Load it with: sqlite3 -bail <database> < <file>
PRAGMA foreign_keys = OFF;
PRAGMA synchronous = OFF;
BEGIN;

CREATE TABLE customers ( -- People who bought at least once
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL,
    country VARCHAR(2) DEFAULT 'US' NOT NULL,
    is_active INTEGER DEFAULT 1 NOT NULL,
    tags TEXT NOT NULL,
    signed_up DATE,
    created_at TIMESTAMP DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now')) NOT NULL,
    CONSTRAINT customers_is_active_check CHECK (is_active IN (0, 1))
);

CREATE TABLE orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    customer_id INTEGER NOT NULL,
    status TEXT DEFAULT 'pending' NOT NULL,
    total DECIMAL(10,2) NOT NULL,
    items INTEGER DEFAULT 1 NOT NULL,
    ordered_at DATETIME NOT NULL,
    shipped_at DATETIME,
    note TEXT,
    details TEXT,
    delivery TEXT,
    CONSTRAINT orders_status_check CHECK (status IN ('pending', 'paid', 'shipped', 'cancelled')),
    CONSTRAINT orders_orders_total_check CHECK (total >= (0)),
    CONSTRAINT orders_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES customers (id)
);

INSERT INTO customers (id, name, email, country, is_active, tags, signed_up, created_at) VALUES
(1,'Ana Martínez','ana@example.com','MX',1,'["vip"]','2023-01-15','2023-01-15 10:24:00'),
(2,'Zoë Müller','zoe@example.de','DE',1,'[]','2023-02-03','2023-02-03 08:11:42'),
(3,'José Peña','jose@example.es','ES',0,'["wholesale","late payer"]','2023-03-21','2023-03-21 19:05:17'),
(4,'李雷','lilei@example.cn','CN',1,'[]','2023-05-09','2023-05-09 02:40:00'),
(5,'Noah O''Brien','noah@example.ie','IE',1,'[]',NULL,'2023-06-30 14:00:00'),
(6,'Amélie Laurent','amelie@example.fr','FR',1,'["vip"]','2024-01-02','2024-01-02 09:30:00'),
(7,'Ravi Patel','ravi@example.in','IN',0,'[]','2024-02-29','2024-02-29 23:59:59'),
(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'[]','2024-04-12','2024-04-12 12:12:12');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, delivery) VALUES
(1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'{"gift": false}','1 day 06:30:00'),
(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','{"gift": true, "wrap": "red"}',NULL),
(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind',NULL,NULL),
(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','{"fragile": true}','2 days 05:50:00'),
(5,5,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice',NULL,NULL),
(6,6,'shipped',310.40,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"','{"fragile": true}','20:00:00'),
(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,NULL,NULL),
(8,2,'shipped',19.99,1,'2024-03-12 08:00:00',NULL,'Shipped date set to infinity by an old import',NULL,NULL),
(9,3,'shipped',64.00,2,'2024-03-14 15:30:00','2024-03-15 10:00:00','Two parcels','{"parcels": [1, 2]}','18:30:00'),
(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\Users\ravi\invoice.pdf',NULL,NULL);

-- Indexes, triggers and counters, after the rows so each index builds once.
CREATE UNIQUE INDEX customers_customers_email_key ON customers (email);
CREATE INDEX orders_idx_orders_customer ON orders (customer_id);
CREATE INDEX orders_idx_orders_status_date ON orders (status, ordered_at);
UPDATE sqlite_sequence SET seq = max(seq, 1000) WHERE name = 'customers';
INSERT INTO sqlite_sequence (name, seq) SELECT 'customers', 1000 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'customers');
UPDATE sqlite_sequence SET seq = max(seq, 5000) WHERE name = 'orders';
INSERT INTO sqlite_sequence (name, seq) SELECT 'orders', 5000 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'orders');
COMMIT;

-- Rows whose foreign key finds no parent, if any: the load doesn't stop for them.
PRAGMA foreign_key_check;

Correcciones

  1. "created_at" de customers contiene instantes con zona horaria; SQLite no tiene un tipo que la conserve, así que se guardan en UTC como TIMESTAMP.
  2. "tags" de customers es text[], que SQLite no tiene, así que es TEXT con los mismos valores.
  3. "delivery" de orders es interval, que SQLite no tiene, así que es TEXT con los mismos valores.

Para revisar

  • 1 vista, disparador, rutina o evento no se convierte; el informe lista cada uno. Vuelve a crearlos a mano en SQLite.
  • El valor predeterminado de "tags" en customers no se puede escribir para SQLite (a value its type can't hold), así que la columna no tiene valor predeterminado. Agrega el valor predeterminado a mano si las filas nuevas lo necesitan.
  • El índice idx_orders_details de orders usa una expresión que no se puede escribir para SQLite (a gin index), así que no se crea. Crea el índice a mano si las consultas lo necesitan.
  • 1 valor en "shipped_at" de orders es una fecha que SQLite no puede guardar, como infinity, así que queda en NULL. SQLite guarda los años 1 a 9999 sin infinito; reemplaza esas fechas en el origen si importan.

Tu archivo se convierte en esta computadora y nunca se sube.

Otros ejemplos:

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.

  • boolean

    INTEGER 0 o 1 con un CHECK

    SQLite no tiene tipo booleano; su propio true y false son 1 y 0.

  • varchar(n), char(n), text

    VARCHAR(n) y TEXT, sin aplicar

    SQLite conserva el tipo declarado para que lo lean las herramientas, pero no limita la longitud.

  • numeric(p,s) past 15 digits and numeric without a precision

    TEXT

    SQLite guarda unos 15 dígitos significativos en un número. Los números más anchos se guardan como texto para que cada dígito siga exacto.

    Línea del informe: decimal_as_text

  • money

    NUMERIC

    SQLite no tiene tipo money. El importe se guarda como número, sin el símbolo de moneda que agregó la configuración regional del servidor.

    Línea del informe: type_replaced

  • interval

    TEXT con el texto de PostgreSQL

    SQLite no tiene tipo interval; el texto conserva cada parte.

    Línea del informe: type_replaced

  • arrays (integer[], text[]...)

    TEXT con un arreglo JSON

    SQLite no tiene arreglos. Un arreglo JSON conserva cada elemento y NULL, y las funciones JSON de SQLite lo leen.

    Línea del informe: type_replaced

  • ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types

    TEXT con el texto de PostgreSQL

    SQLite no tiene un tipo equivalente, así que cada valor conserva el texto que escribió PostgreSQL.

    Línea del informe: type_replaced

  • json, jsonb

    TEXT

    Las funciones JSON de SQLite leen JSON desde texto.

  • timestamp

    DATETIME como texto ISO 8601

    SQLite guarda las fechas como texto que leen sus funciones de fecha.

  • timestamp with time zone

    TIMESTAMP como texto ISO 8601 en UTC

    SQLite no tiene un tipo que conserve el desfase, así que cada instante se escribe en UTC: el mismo instante sea cual sea el desfase que escribió el volcado.

    Línea del informe: moments_as_utc

  • time

    TIME como texto

    SQLite guarda las horas como texto, 24:00:00 incluido.

  • infinity, -infinity and BC dates

    NULL

    Las funciones de fecha de SQLite leen los años 0 a 9999 sin infinito. Esos valores se vuelven NULL y el informe los cuenta.

    Línea del informe: date_out_of_range

  • NaN and Infinity in numeric, real and double precision

    NULL

    SQLite guarda NaN como NULL y su infinito no sobrevive en todas las herramientas, así que esos valores se vuelven NULL y el informe los cuenta.

    Línea del informe: invalid_value_null

  • NOT NULL columns with values that become NULL

    sin NOT NULL

    Una columna cuyos valores tuvieron que volverse NULL no puede conservar NOT NULL, o la carga se detendría.

    Línea del informe: not_null_relaxed

  • enum types

    TEXT con un CHECK de sus etiquetas

    El texto con un CHECK conserva los mismos valores.

  • enum columns holding values outside their labels

    TEXT sin CHECK

    Los valores que las etiquetas no nombran no cumplirían el CHECK, así que el CHECK no se crea.

    Línea del informe: enum_check_skipped

  • uuid, inet, cidr, macaddr

    TEXT

    SQLite no tiene esos tipos; el texto conserva cada valor.

  • bytea

    BLOB

    Los bytes siguen siendo bytes.

  • bit(n), bit varying

    INTEGER con el valor de los bits hasta 63 bits; dígitos en TEXT si son más

    Una cadena de bits se guarda como el número que forman sus bits mientras quepa en un entero con signo.

  • oid, xid, cid

    INTEGER con un CHECK de que no sea negativo

    Los enteros de 64 bits de SQLite admiten cada valor.

  • citext and nondeterministic collations

    comparación exacta

    SQLite compara el texto exactamente salvo que se indique otra cosa, y su NOCASE solo pliega letras ASCII.

    Línea del informe: case_insensitive_collation

  • serial, identity

    INTEGER PRIMARY KEY AUTOINCREMENT, siguiendo después del id más alto

    SQLite cuenta una clave primaria entera completa, y AUTOINCREMENT evita que se reutilicen los ids, como hace una secuencia.

  • serial and identity columns that aren't the whole primary key

    INTEGER sin contador

    SQLite solo cuenta una columna que es toda la clave primaria, así que la columna conserva sus valores y las filas nuevas necesitan los suyos.

    Línea del informe: counter_dropped

  • sequences not owned by a column

    no se crea

    SQLite no tiene secuencias.

    Línea del informe: sequence_not_converted

  • generated columns

    GENERATED ALWAYS AS, STORED o VIRTUAL como en el origen

    SQLite 3.31 y posteriores calculan las columnas generadas de las mismas dos formas.

  • generated columns with functions SQLite lacks

    una columna simple con los valores

    Una fórmula que no se puede escribir para SQLite deja una columna simple con los valores del volcado y una línea en el informe.

    Línea del informe: generated_not_translated

  • defaults with functions SQLite lacks, and defaults from a sequence

    sin valor predeterminado

    Un valor predeterminado que no se puede escribir para SQLite se deja fuera y aparece en el informe.

    Línea del informe: default_not_translated

  • CHECK constraints

    traducido, en línea en CREATE TABLE

    SQLite solo acepta CHECK en CREATE TABLE.

  • CHECK constraints with functions SQLite lacks

    no se crea

    Un CHECK que no se puede escribir para SQLite se deja fuera y aparece en el informe.

    Línea del informe: check_skipped

  • CHECK ... NOT VALID

    no se crea

    PostgreSQL nunca comprobó las filas que ya estaban, y SQLite las comprobaría al cargar.

    Línea del informe: check_not_valid

  • gin, gist, brin and hash indexes, partial and expression indexes

    no se crea

    IntoSQL escribe índices b-tree sobre columnas para SQLite; vuelve a crear los demás después de cargar.

    Línea del informe: index_skipped

  • foreign keys

    en CREATE TABLE, cargadas sin comprobar, luego listadas por PRAGMA foreign_key_check

    SQLite solo acepta claves foráneas en CREATE TABLE y solo las comprueba con PRAGMA foreign_keys activado. Las filas cargan sin comprobar y el script termina listando cada fila sin padre.

  • foreign keys to tables the dump doesn't create

    no se crea

    Una clave no puede nombrar una tabla que no existe.

    Línea del informe: foreign_key_skipped

  • partitioned tables

    una tabla con las filas de todas las particiones

    Las filas son las mismas.

    Línea del informe: partitions_dropped

  • schemas

    un archivo, con el nombre del esquema delante de cada tabla

    Un archivo SQLite es una sola base de datos, así que el nombre del esquema distingue las tablas con el mismo nombre; las tablas de public conservan sus nombres.

    Línea del informe: schemas_merged

  • views, functions, procedures, triggers, rules, policies, extensions and types

    listados en el informe

    Su código está escrito en el lenguaje de PostgreSQL, así que se listan para que los vuelvas a crear.

    Línea del informe: not_converted_objects

  • dumps without CREATE TABLE (--data-only)

    tipos leídos de los valores

    Un volcado solo de datos solo tiene filas, así que los tipos salen de los valores.

    Línea del informe: no_schema

  • expressions in INSERT values

    NULL

    Un convertidor que no ejecuta una base de datos no puede evaluarlas.

    Línea del informe: expression_value

  • types IntoSQL doesn't know

    TEXT

    El texto admite cualquier valor; cambia el tipo después de cargar.

    Línea del informe: unknown_type

  • text that isn't valid in its encoding

    los bytes incorrectos como carácter de reemplazo

    El texto de SQLite es UTF-8.

    Línea del informe: invalid_utf8_replaced

  • text decoded twice (ñ)

    se copia tal cual

    El volcado contiene exactamente estos caracteres, así que se copian; el informe los señala.

    Línea del informe: mojibake_suspected

En PostgreSQLEn SQLiteLínea del informe
booleanINTEGER 0 o 1 con un CHECKSQLite no tiene tipo booleano; su propio true y false son 1 y 0.
varchar(n), char(n), textVARCHAR(n) y TEXT, sin aplicarSQLite conserva el tipo declarado para que lo lean las herramientas, pero no limita la longitud.
numeric(p,s) past 15 digits and numeric without a precisionTEXTSQLite guarda unos 15 dígitos significativos en un número. Los números más anchos se guardan como texto para que cada dígito siga exacto.decimal_as_text
moneyNUMERICSQLite no tiene tipo money. El importe se guarda como número, sin el símbolo de moneda que agregó la configuración regional del servidor.type_replaced
intervalTEXT con el texto de PostgreSQLSQLite no tiene tipo interval; el texto conserva cada parte.type_replaced
arrays (integer[], text[]...)TEXT con un arreglo JSONSQLite no tiene arreglos. Un arreglo JSON conserva cada elemento y NULL, y las funciones JSON de SQLite lo leen.type_replaced
ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension typesTEXT con el texto de PostgreSQLSQLite no tiene un tipo equivalente, así que cada valor conserva el texto que escribió PostgreSQL.type_replaced
json, jsonbTEXTLas funciones JSON de SQLite leen JSON desde texto.
timestampDATETIME como texto ISO 8601SQLite guarda las fechas como texto que leen sus funciones de fecha.
timestamp with time zoneTIMESTAMP como texto ISO 8601 en UTCSQLite no tiene un tipo que conserve el desfase, así que cada instante se escribe en UTC: el mismo instante sea cual sea el desfase que escribió el volcado.moments_as_utc
timeTIME como textoSQLite guarda las horas como texto, 24:00:00 incluido.
infinity, -infinity and BC datesNULLLas funciones de fecha de SQLite leen los años 0 a 9999 sin infinito. Esos valores se vuelven NULL y el informe los cuenta.date_out_of_range
NaN and Infinity in numeric, real and double precisionNULLSQLite guarda NaN como NULL y su infinito no sobrevive en todas las herramientas, así que esos valores se vuelven NULL y el informe los cuenta.invalid_value_null
NOT NULL columns with values that become NULLsin NOT NULLUna columna cuyos valores tuvieron que volverse NULL no puede conservar NOT NULL, o la carga se detendría.not_null_relaxed
enum typesTEXT con un CHECK de sus etiquetasEl texto con un CHECK conserva los mismos valores.
enum columns holding values outside their labelsTEXT sin CHECKLos valores que las etiquetas no nombran no cumplirían el CHECK, así que el CHECK no se crea.enum_check_skipped
uuid, inet, cidr, macaddrTEXTSQLite no tiene esos tipos; el texto conserva cada valor.
byteaBLOBLos bytes siguen siendo bytes.
bit(n), bit varyingINTEGER con el valor de los bits hasta 63 bits; dígitos en TEXT si son másUna cadena de bits se guarda como el número que forman sus bits mientras quepa en un entero con signo.
oid, xid, cidINTEGER con un CHECK de que no sea negativoLos enteros de 64 bits de SQLite admiten cada valor.
citext and nondeterministic collationscomparación exactaSQLite compara el texto exactamente salvo que se indique otra cosa, y su NOCASE solo pliega letras ASCII.case_insensitive_collation
serial, identityINTEGER PRIMARY KEY AUTOINCREMENT, siguiendo después del id más altoSQLite cuenta una clave primaria entera completa, y AUTOINCREMENT evita que se reutilicen los ids, como hace una secuencia.
serial and identity columns that aren't the whole primary keyINTEGER sin contadorSQLite solo cuenta una columna que es toda la clave primaria, así que la columna conserva sus valores y las filas nuevas necesitan los suyos.counter_dropped
sequences not owned by a columnno se creaSQLite no tiene secuencias.sequence_not_converted
generated columnsGENERATED ALWAYS AS, STORED o VIRTUAL como en el origenSQLite 3.31 y posteriores calculan las columnas generadas de las mismas dos formas.
generated columns with functions SQLite lacksuna columna simple con los valoresUna fórmula que no se puede escribir para SQLite deja una columna simple con los valores del volcado y una línea en el informe.generated_not_translated
defaults with functions SQLite lacks, and defaults from a sequencesin valor predeterminadoUn valor predeterminado que no se puede escribir para SQLite se deja fuera y aparece en el informe.default_not_translated
CHECK constraintstraducido, en línea en CREATE TABLESQLite solo acepta CHECK en CREATE TABLE.
CHECK constraints with functions SQLite lacksno se creaUn CHECK que no se puede escribir para SQLite se deja fuera y aparece en el informe.check_skipped
CHECK ... NOT VALIDno se creaPostgreSQL nunca comprobó las filas que ya estaban, y SQLite las comprobaría al cargar.check_not_valid
gin, gist, brin and hash indexes, partial and expression indexesno se creaIntoSQL escribe índices b-tree sobre columnas para SQLite; vuelve a crear los demás después de cargar.index_skipped
foreign keysen CREATE TABLE, cargadas sin comprobar, luego listadas por PRAGMA foreign_key_checkSQLite solo acepta claves foráneas en CREATE TABLE y solo las comprueba con PRAGMA foreign_keys activado. Las filas cargan sin comprobar y el script termina listando cada fila sin padre.
foreign keys to tables the dump doesn't createno se creaUna clave no puede nombrar una tabla que no existe.foreign_key_skipped
partitioned tablesuna tabla con las filas de todas las particionesLas filas son las mismas.partitions_dropped
schemasun archivo, con el nombre del esquema delante de cada tablaUn archivo SQLite es una sola base de datos, así que el nombre del esquema distingue las tablas con el mismo nombre; las tablas de public conservan sus nombres.schemas_merged
views, functions, procedures, triggers, rules, policies, extensions and typeslistados en el informeSu código está escrito en el lenguaje de PostgreSQL, así que se listan para que los vuelvas a crear.not_converted_objects
dumps without CREATE TABLE (--data-only)tipos leídos de los valoresUn volcado solo de datos solo tiene filas, así que los tipos salen de los valores.no_schema
expressions in INSERT valuesNULLUn convertidor que no ejecuta una base de datos no puede evaluarlas.expression_value
types IntoSQL doesn't knowTEXTEl texto admite cualquier valor; cambia el tipo después de cargar.unknown_type
text that isn't valid in its encodinglos bytes incorrectos como carácter de reemplazoEl texto de SQLite es UTF-8.invalid_utf8_replaced
text decoded twice (ñ)se copia tal cualEl volcado contiene exactamente estos caracteres, así que se copian; el informe los señala.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.

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

¿No encuentras la respuesta? Escríbenos desde la página de contacto y te responde una persona. Página de contacto

¿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.