如何将SQLite3脚本转换为PostgreSQL可以理解的脚本?

时间:2011-06-01 15:59:27

标签: sql postgresql sqlite

我有一个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开头的错误,将'unsigned'字段更改为1而不是true而0而不是false。

是否有正确的方法来转换此脚本?

我想将每个表导出为CSV然后将它们导入PGDB但是我有很多表,这不是一个选项。

4 个答案:

答案 0 :(得分:2)

Ruby解决方案:

gem install sequel

sequel -C sqlite://db/development.sqlite3 postgres://user:password@localhost/dbname

答案 1 :(得分:0)

使用可以在SquirrelSQL等数据库之间复制数据的工具。

JDBC driver for sqlite3

请注意,这仍然是很多手工工作。 JDBC驱动程序将允许复制数据,但您仍需要手动转换表定义。

或者你可以编写一个简单的字符串替换工具;这通常适用于SQL。

答案 2 :(得分:0)

我认为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中进行了测试并且正常工作。

答案 3 :(得分:0)

我使用了一个名为Navicat的程序。我导出了每个表,然后将它们导入到新数据库中,这很痛苦而且很慢。

当我将SQL放入PG Admin III时,使用SQLiteman的SQL转储并不是好兆头。