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