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, aby id
kolumna była „automatycznie zwiększana”, zmień jej typ z „int” na „serial” w linii tworzenia tabeli. PostgreSQL dołączy wtedy sekwencję do tej kolumny, tak aby wstawkom INSERT z identyfikatorami NULL automatycznie przypisywana była następna dostępna wartość. PostgreSQL również nie rozpoznaje AUTOINCREMENT
poleceń, więc należy je usunąć.
Będziesz także chciał sprawdzić datetime
kolumny w schemacie SQLite i zmienić je timestamp
na PostgreSQL. (Dzięki Clayowi za wskazanie tego).
Jeśli masz wartości logiczne w swoim SQLite, możesz przekonwertować 1
i 0
na 1::boolean
i 0::boolean
(odpowiednio) lub możesz zmienić kolumnę boolowską na liczbę całkowitą w sekcji schematu zrzutu, a następnie naprawić je ręcznie w PostgreSQL po imporcie.
Jeśli masz obiekty BLOB w swoim SQLite, będziesz chciał dostosować schemat do użycia bytea
. Prawdopodobnie będziesz musiał również włączyć się do niektórych decode
rozmów . Napisanie szybkiej i brudnej kserokopiarki w swoim ulubionym języku może być łatwiejsze niż manipulowanie kodem SQL, jeśli jednak masz do czynienia z wieloma BLOBami.
Jak zwykle, jeśli masz klucze obce, prawdopodobnie będziesz chciał zajrzeć, set constraints all deferred
aby uniknąć problemów z kolejnością wstawiania, umieszczając polecenie wewnątrz pary BEGIN / COMMIT.
Podziękowania dla Nicolasa Rileya za notatki logiczne, blob i ograniczenia.
Jeśli masz `
na swoim kodzie wygenerowanym przez niektórych klientów SQLite3, musisz je usunąć.
PostGRESQL również nie rozpoznaje unsigned
kolumn, więc możesz to porzucić lub dodać niestandardowe ograniczenie, takie jak to:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Podczas gdy SQLite domyślnie przyjmuje wartości null na ''
, PostgreSQL wymaga, aby były ustawione 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 przekazać je psql
. Importowanie dużej ilości danych przez SQL INSERT może zająć trochę czasu, ale zadziała.