PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Converti il ​​file di dump SQLITE SQL in POSTGRESQL

Dovresti essere in grado di inserire il file dump direttamente in psql :

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

Se vuoi il id colonna in "incremento automatico", quindi cambia il suo tipo da "int" a "seriale" nella riga di creazione della tabella. PostgreSQL allegherà quindi una sequenza a quella colonna in modo che agli INSERT con ID NULL venga assegnato automaticamente il successivo valore disponibile. PostgreSQL inoltre non riconoscerà AUTOINCREMENT comandi, quindi questi devono essere rimossi.

Dovrai anche controllare datetime colonne nello schema SQLite e modificarle in timestamp per PostgreSQL. (Grazie a Clay per averlo segnalato.)

Se hai booleani nel tuo SQLite, puoi convertire 1 e 0 a 1::boolean e 0::boolean (rispettivamente) oppure potresti cambiare la colonna booleana in un numero intero nella sezione dello schema del dump e quindi correggerli manualmente all'interno di PostgreSQL dopo l'importazione.

Se hai BLOB nel tuo SQLite, ti consigliamo di modificare lo schema per utilizzare bytea . Probabilmente dovrai aggiungere un po' di decode chiamate pure. Scrivere una fotocopiatrice veloce e sporca nella tua lingua preferita potrebbe essere più facile che manipolare l'SQL se hai molti BLOB da gestire.

Come al solito, se hai chiavi esterne, probabilmente vorrai esaminare set constraints all deferred per evitare problemi di inserimento dell'ordine, inserire il comando all'interno della coppia BEGIN/COMMIT.

Grazie a Nicolas Riley per le note booleane, blob e vincoli.

Se hai ` sul tuo codice, generato da alcuni client SQLite3, devi rimuoverli.

PostGRESQL inoltre non riconosce unsigned colonne, quindi potresti voler eliminarlo o aggiungere un vincolo personalizzato come questo:

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

Mentre SQLite imposta i valori nulli predefiniti su '' , PostgreSQL richiede che siano impostati come NULL .

La sintassi nel file di dump di SQLite sembra essere per lo più compatibile con PostgreSQL, quindi puoi correggere alcune cose e inviarlo a psql . L'importazione di una grande quantità di dati tramite SQL INSERT potrebbe richiedere del tempo, ma funzionerà.