sql >> Base de Datos >  >> RDS >> PostgreSQL

Convierta el archivo de volcado SQL de SQLITE a POSTGRESQL

Debería poder alimentar ese archivo de volcado directamente a psql :

/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql

Si quieres el id columna a "incremento automático" y luego cambie su tipo de "int" a "serial" en la línea de creación de la tabla. PostgreSQL luego adjuntará una secuencia a esa columna para que los INSERT con ID NULL se asignen automáticamente al siguiente valor disponible. PostgreSQL tampoco reconocerá AUTOINCREMENT comandos, por lo que estos deben eliminarse.

También querrá verificar datetime columnas en el esquema de SQLite y cámbielas a timestamp para PostgreSQL. (Gracias a Clay por señalar esto).

Si tiene valores booleanos en su SQLite, entonces podría convertir 1 y 0 a 1::boolean y 0::boolean (respectivamente) o puede cambiar la columna booleana a un número entero en la sección de esquema del volcado y luego corregirlos a mano dentro de PostgreSQL después de la importación.

Si tiene BLOB en su SQLite, querrá ajustar el esquema para usar bytea . Probablemente necesitará mezclar algo de decode llamadas también. Sin embargo, escribir una copia rápida y sucia en su idioma favorito puede ser más fácil que manipular el SQL si tiene que lidiar con muchos BLOB.

Como de costumbre, si tiene claves foráneas, entonces probablemente querrá buscar en set constraints all deferred para evitar problemas de orden de inserción, coloque el comando dentro del par BEGIN/COMMIT.

Gracias a Nicolas Riley por las notas booleanas, de blob y de restricciones.

Si tienes ` en su código, generado por algunos clientes SQLite3, debe eliminarlos.

PostGRESQL tampoco reconoce unsigned columnas, por lo que es posible que desee eliminar eso o agregar una restricción personalizada como esta:

CREATE TABLE tablename (
    ...
    unsigned_column_name integer CHECK (unsigned_column_name > 0)
);

Mientras que SQLite tiene valores nulos por defecto en '' , PostgreSQL requiere que se establezcan como NULL .

La sintaxis en el archivo de volcado de SQLite parece ser en su mayoría compatible con PostgreSQL, por lo que puede parchear algunas cosas y enviarlas a psql . Importar una gran cantidad de datos a través de SQL INSERT puede llevar un tiempo, pero funcionará.