Вы должны быть в состоянии передать этот файл дампа прямо в psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Если вы хотите, чтобы столбец id
имел значение «автоинкремент», измените его тип с «int» на «serial» в строке создания таблицы. PostgreSQL затем присоединит последовательность к этому столбцу, чтобы INSERT с NULL-идентификаторами автоматически присваивалось следующее доступное значение. PostgreSQL также не распознает команды AUTOINCREMENT
, поэтому их необходимо удалить.
Вы также захотите проверить datetime
столбцы в схеме SQLite и изменить их на timestamp
для PostgreSQL (спасибо Clay за указание на это).
Если в вашем SQLite есть логические значения, вы можете преобразовать 1
и 0
и 1::boolean
и 0::boolean
(соответственно) или изменить логический столбец на целое число в разделе схемы дампа и затем исправьте их вручную в PostgreSQL после импорта.
Если в вашем SQLite есть большие двоичные объекты, вам нужно настроить схему для использования bytea
. Вам, вероятно, нужно будет смешивать в некоторых decode
вызовах также . Написание быстрого и грязного копира на вашем любимом языке может быть проще, чем манипулирование SQL, если вам нужно иметь дело с большим количеством больших двоичных объектов.
Как обычно, если у вас есть внешние ключи, вы, вероятно, захотите заглянуть в set constraints all deferred
, чтобы избежать проблем с порядком вставки, поместив команду внутри пары BEGIN / COMMIT.
Спасибо Николасу Райли за логические примечания, BLOB-объекты и ограничения.
Если у вас есть `
в вашем коде, сгенерированном некоторыми клиентами SQLite3, вам нужно удалить их.
PostGRESQL также не распознает unsigned
столбцы, возможно, вы захотите удалить их или добавить пользовательское ограничение, например:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
В то время как SQLite по умолчанию принимает нулевые значения ''
, PostgreSQL требует, чтобы они были установлены как NULL
.
Синтаксис в файле дампа SQLite, по-видимому, в основном совместим с PostgreSQL, поэтому вы можете исправить некоторые вещи и передать их в psql
. Импорт большого количества данных через SQL INSERT может занять некоторое время, но это сработает.