Как преобразовать скрипт SQLite3 в скрипт, понятный PostgreSQL? - PullRequest
3 голосов
/ 01 июня 2011

У меня есть база данных SQLite3. Я сделал дамп данных, который выглядит примерно так:

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE "admin_tools_menu_bookmark" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL,
    "url" varchar(255) NOT NULL,
    "title" varchar(255) NOT NULL
);
INSERT INTO "admin_tools_menu_bookmark" VALUES(1,2,'/admin/recipes/recipe/','Recipe Management');
INSERT INTO "admin_tools_menu_bookmark" VALUES(2,2,'/admin/recipes/ingredient/','Ingredient Management');
CREATE TABLE "admin_tools_dashboard_preferences" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL,
    "data" text NOT NULL
);
......

Я пытаюсь выполнить это в PostgreSQL PgAdmin III, который выдает мне много ошибок, начиная с PRAGMA, от «неподписанных» полей до полей даты и времени, равных 1 вместо true и 0 вместо false.

Есть ли правильный способ конвертировать этот скрипт?

Я думал об экспорте каждой таблицы в CSV, а затем об импорте их в PGDB, но у меня так много таблиц, что это не вариант.

Ответы [ 4 ]

2 голосов
/ 11 января 2016

Рубиновый раствор:

gem install sequel

sequel -C sqlite://db/development.sqlite3 postgres://user:password@localhost/dbname
0 голосов
/ 01 июня 2011

Полагаю, PRAGMA foregin_keys... - это некоторый синтаксис SQLite, который не работает в PostgreSQL.
Вы можете просто пропустить это и сделать:

BEGIN TRANSACTION;
CREATE TABLE "admin_tools_menu_bookmark" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL,
    "url" varchar(255) NOT NULL,
    "title" varchar(255) NOT NULL
);
INSERT INTO "admin_tools_menu_bookmark" VALUES(1,2,'/admin/recipes/recipe/','Recipe Management');
INSERT INTO "admin_tools_menu_bookmark" VALUES(2,2,'/admin/recipes/ingredient/','Ingredient Management');
CREATE TABLE "admin_tools_dashboard_preferences" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL,
    "data" text NOT NULL
);
COMMIT;  

Я проверил это в моем pgAdmin III и работает.

0 голосов
/ 01 июня 2011

Я использовал программу под названием Navicat. Я экспортировал каждую таблицу и затем импортировал их в новую базу данных, что было болезненно и медленно.

Дамп SQL с использованием SQLiteman просто не предвещал ничего хорошего, когда я помещал SQL в PG Admin III.

0 голосов
/ 01 июня 2011

Используйте инструмент для копирования данных между базами данных, например SquirrelSQL .

. Существует драйвер JDBC для sqlite3 .

.все равно будет много ручной работы.Драйверы JDBC позволят копировать данные, но вам все еще нужно преобразовать определения таблиц вручную.

Или вы можете написать инструмент, который выполняет простую замену строк;это обычно работает очень хорошо с SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...