Powinieneś być w stanie przesłać ten plik zrzutu bezpośrednio do psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Jeśli chcesz id
kolumna na „auto increment”, a następnie zmień jej typ z „int” na „serial” w wierszu tworzenia tabeli. PostgreSQL dołączy następnie sekwencję do tej kolumny, dzięki czemu INSERTom z identyfikatorami NULL zostanie automatycznie przypisana następna dostępna wartość. PostgreSQL również nie rozpoznaje AUTOINCREMENT
polecenia, więc należy je usunąć.
Będziesz także chciał sprawdzić datetime
kolumny w schemacie SQLite i zmień je na timestamp
dla PostgreSQL. (Podziękowania dla Claya za wskazanie tego.)
Jeśli masz wartości logiczne w swoim SQLite, możesz przekonwertować 1
i 0
do 1::boolean
i 0::boolean
(odpowiednio) lub możesz zmienić kolumnę logiczną na liczbę całkowitą w sekcji schematu zrzutu, a następnie naprawić je ręcznie w PostgreSQL po imporcie.
Jeśli masz BLOB w swoim SQLite, będziesz chciał dostosować schemat, aby używał bytea
. Prawdopodobnie będziesz musiał wmieszać trochę decode
również dzwoni. Napisanie szybkiej i brudnej kopii w twoim ulubionym języku może być łatwiejsze niż manipulowanie SQL, jeśli masz do czynienia z wieloma BLOBami.
Jak zwykle, jeśli masz klucze obce, prawdopodobnie będziesz chciał zajrzeć do set constraints all deferred
aby uniknąć problemów z kolejnością wstawiania, umieść polecenie wewnątrz pary BEGIN/COMMIT.
Podziękowania dla Nicolasa Rileya za uwagi logiczne, blob i ograniczenia.
Jeśli masz `
w kodzie wygenerowanym przez niektórych klientów SQLite3, musisz je usunąć.
PostGRESQL również nie rozpoznaje unsigned
kolumn, więc możesz chcieć je usunąć lub dodać niestandardowe ograniczenie, takie jak to:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Podczas gdy SQLite domyślnie wartości null to ''
, PostgreSQL wymaga ich ustawienia jako NULL
.
Składnia w pliku zrzutu SQLite wydaje się być w większości zgodna z PostgreSQL, więc możesz załatać kilka rzeczy i przesłać ją do psql
. Importowanie dużego stosu danych przez SQL INSERT może trochę potrwać, ale zadziała.