我有一个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但是我有很多表,这不是一个选项。
答案 0 :(得分:2)
Ruby解决方案:
gem install sequel
sequel -C sqlite://db/development.sqlite3 postgres://user:password@localhost/dbname
答案 1 :(得分:0)
使用可以在SquirrelSQL等数据库之间复制数据的工具。
请注意,这仍然是很多手工工作。 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转储并不是好兆头。