转储没有自动生成列的SQLite表/ DB(例如id)

时间:2015-10-29 09:27:55

标签: sqlite

我有一个SQLite 3数据库(db),就像这个简化的例子一样:

CREATE TABLE user(id integer primary key, name text);
INSERT INTO "user" VALUES(1,'user1');
INSERT INTO "user" VALUES(2,'user2');

如果我输入.dump,sqlite会将这些语句包装在一个事务中,并将它们写入先前用db.sql定义的文件.output。如果我需要将数据导入空数据库,这很好。

我希望能够将用户数据导入到定义了其他用户的其他数据库。如果我尝试,我很可能得到这样的东西(因为id可能已经在目标数据库中使用):

Error: near line 4: PRIMARY KEY must be unique
Error: near line 5: PRIMARY KEY must be unique

我的方法:

  • 我可以手动调整转储的SQL以删除除插入之外的所有内容,并在语句中删除id列(仅提及name),但此方法无法扩展,因为我想自动化这个过程。
  • 我可以从db中选择并自己编写SQL。

我缺少任何简单或更优雅的方法吗? sqlite3将在现实世界问题中从Bash脚本运行。

1 个答案:

答案 0 :(得分:2)

您可以自动调整(但这仍然需要您知道表格结构):

$ (echo ".mode insert"; echo "SELECT name FROM user;") | \
  sqlite3 my.db | \
  sed -e 's/^INSERT INTO table /INSERT INTO user(name) /'
INSERT INTO user(name) VALUES('user1');
INSERT INTO user(name) VALUES('user2');