如何转储数据库的一些SQLite3表(而不是所有表)的数据,并且只转储数据,而不转储模式? 转储应该是SQL格式的,因为它以后可以很容易地重新输入到数据库中,并且应该从命令行完成。类似的
sqlite3 db .dump
但是没有转储模式和选择要转储的表。
如何转储数据库的一些SQLite3表(而不是所有表)的数据,并且只转储数据,而不转储模式? 转储应该是SQL格式的,因为它以后可以很容易地重新输入到数据库中,并且应该从命令行完成。类似的
sqlite3 db .dump
但是没有转储模式和选择要转储的表。
当前回答
这个版本在插入的换行中工作得很好:
数据库sqlite3。sqlite3 .dump | grep '^CREATE'
实际上排除了所有以CREATE开头的行,这样不太可能包含换行符
其他回答
你还没说你想怎么处理被丢弃的文件。
获取CSV文件(可以导入到几乎所有文件中)
.mode csv
-- use '.separator SOME_STRING' for something other than a comma.
.headers on
.out file.csv
select * from MyTable;
获取一个SQL文件(可以重新插入到不同的SQLite数据库中)
.mode insert <target_table_name>
.out file.sql
select * from MyTable;
任何建议使用grep排除CREATE行或仅从sqlite3 $DB .dump输出中获取INSERT行的答案都将严重失败。CREATE TABLE命令每行列出一列(因此排除CREATE不会得到全部),INSERT行上的值可以有嵌入的换行符(因此不能只获取INSERT行)。
for t in $(sqlite3 $DB .tables); do
echo -e ".mode insert $t\nselect * from $t;"
done | sqlite3 $DB > backup.sql
在sqlite3 3.6.20版本上测试。
如果你想排除某些表,你可以用$(sqlite $DB .tables | grep -v -e one -e two -e three)过滤它们,或者如果你想获得一个特定的子集,用one two three替换它。
您可以对表进行选择,在每个字段后插入逗号以生成csv,或者使用GUI工具返回所有数据并将其保存为csv。
你可以获取.schema和.dump命令的不同。例如,使用grep:
sqlite3 some.db .schema > schema.sql
sqlite3 some.db .dump > dump.sql
grep -vx -f schema.sql dump.sql > data.sql
数据。SQL文件将只包含没有模式的数据,就像这样:
BEGIN TRANSACTION;
INSERT INTO "table1" VALUES ...;
...
INSERT INTO "table2" VALUES ...;
...
COMMIT;
您可以为.dump特殊命令指定一个或多个表参数,例如sqlite3 db "。Dump 'table1' 'table2' '”。