Měli byste být schopni vložit tento soubor výpisu přímo do psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Pokud chcete id
sloupec na "automatický přírůstek", pak změňte jeho typ z "int" na "sériový" v řádku vytváření tabulky. PostgreSQL pak k tomuto sloupci připojí sekvenci, takže INSERTům s NULL id bude automaticky přiřazena další dostupná hodnota. PostgreSQL také nerozpozná AUTOINCREMENT
příkazy, takže je třeba je odstranit.
Budete také chtít zkontrolovat datetime
sloupce ve schématu SQLite a změňte je na timestamp
pro PostgreSQL. (Díky Clayovi za upozornění.)
Pokud máte ve svém SQLite booleany, můžete převést 1
a 0
na 1::boolean
a 0::boolean
(respektive) nebo můžete změnit booleovský sloupec na celé číslo v sekci schématu výpisu a poté je po importu ručně opravit v PostgreSQL.
Pokud máte ve svém SQLite objekty BLOB, budete chtít upravit schéma tak, aby používala bytea
. Pravděpodobně budete muset přimíchat nějaké decode
hovory také. Psaní rychlé a špinavé kopírky ve vašem oblíbeném jazyce může být snazší než mandlování SQL, pokud se však musíte vypořádat se spoustou objektů BLOB.
Jako obvykle, pokud máte cizí klíče, pravděpodobně se budete chtít podívat na set constraints all deferred
abyste se vyhnuli problémům s řazením vložení, umístěte příkaz do dvojice BEGIN/COMMIT.
Děkujeme Nicolasi Rileymu za poznámky typu boolean, blob a omezení.
Pokud máte `
ve vašem kódu, který vygenerovali někteří klienti SQLite3, je musíte odstranit.
PostGRESQL také nerozpozná unsigned
sloupce, takže to možná budete chtít vypustit nebo přidat vlastní omezení, jako je toto:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Zatímco SQLite výchozí hodnoty null na ''
, PostgreSQL vyžaduje, aby byly nastaveny jako NULL
.
Syntaxe v souboru výpisu SQLite se zdá být většinou kompatibilní s PostgreSQL, takže můžete opravit pár věcí a přidat je do psql
. Import velké hromady dat přes SQL INSERT může chvíli trvat, ale bude fungovat.