Du burde være i stand til at føre den dump-fil direkte ind i psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Hvis du vil have id
kolonne til "automatisk stigning", og skift derefter dens type fra "int" til "seriel" i tabeloprettelseslinjen. PostgreSQL vil derefter vedhæfte en sekvens til den kolonne, så INSERT'er med NULL-id'er automatisk vil blive tildelt den næste tilgængelige værdi. PostgreSQL genkender heller ikke AUTOINCREMENT
kommandoer, så disse skal fjernes.
Du vil også gerne tjekke efter datetime
kolonner i SQLite-skemaet og ændre dem til timestamp
til PostgreSQL. (Tak til Clay for at påpege dette.)
Hvis du har booleaner i din SQLite, kan du konvertere 1
og 0
til 1::boolean
og 0::boolean
(henholdsvis), eller du kan ændre den booleske kolonne til et heltal i skemasektionen af dumpet og derefter rette dem op i hånden inde i PostgreSQL efter importen.
Hvis du har BLOB'er i din SQLite, vil du gerne justere skemaet til at bruge bytea
. Du bliver sandsynligvis nødt til at blande noget decode
ind opkald også. At skrive en quick'n'dirty kopimaskine på dit yndlingssprog kan være lettere end at ødelægge SQL'en, hvis du dog har mange BLOB'er at håndtere.
Som sædvanligt, hvis du har fremmednøgler, vil du sandsynligvis se nærmere på set constraints all deferred
for at undgå at indsætte bestillingsproblemer skal du placere kommandoen i BEGIN/COMMIT-parret.
Tak til Nicolas Riley for de boolske, klat- og begrænsningsnoter.
Hvis du har `
på din kode, som genereret af nogle SQLite3-klienter, skal du fjerne dem.
PostGRESQL genkender heller ikke unsigned
kolonner, så du vil måske droppe det eller tilføje en skræddersyet begrænsning som denne:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Mens SQLite standard nulværdier til ''
, PostgreSQL kræver, at de sættes som NULL
.
Syntaksen i SQLite dump-filen ser ud til at være for det meste kompatibel med PostgreSQL, så du kan patche et par ting og føre den til psql
. Import af en stor bunke data gennem SQL INSERTs kan tage et stykke tid, men det vil fungere.