通过shell脚本将值从一个数据库表插入到其他数据库表

时间:2014-12-04 00:10:34

标签: database bash sqlite shell command-line

我正在使用2个数据库,例如 logdb.db logdb2.db

我在logdb.db Sqlite数据库中创建了一个名为 Original 的表,如下所示:

CREATE TABLE Original (s_id INT PRIMARY KEY NOT NULL UNIQUE, s_author TEXT, s_timestamp INT, s_editedby TEXT, s_edited_timestamp INT, s_body_xml TEXT);

同样,我在logdb2.db Sqlite数据库中创建了一个名为已编辑 NonEdited 的表,如下所示:     CREATE TABLE已编辑(s_id INT PRIMARY KEY NOT NULL UNIQUE,s_author TEXT,s_timestamp INT,s_editedby TEXT,s_edited_timestamp INT,s_body_xml TEXT);

CREATE TABLE NonEdited (s_id INT PRIMARY KEY NOT NULL UNIQUE, s_author TEXT, s_timestamp INT, s_editedby TEXT, s_edited_timestamp INT, s_body_xml TEXT);

然后我从命令行将logdb2.db附加到logdb.db,如下所示:

$ sqlite3 logdb.db
$ ATTACH DATABASE '/home/sid/Desktop/Logging/logdb2.db' as DB2;

现在,表Original被其他用户插入或更新,因此根据插入的内容,我想将这些值插入到Edited或NonEdited表中。基本上我的目标是原始表的最后几行。所以我创建了一个名为 test.sh 的shell脚本文件,其内容如下:

sqlite3 /home/sid/Desktop/Logging/logdb.db 'insert or replace into DB2.Edited select * from ( select * from Original order by s_id desc limit 10) where s_editedby is NOT NULL order by s_id;'

sqlite3 /home/sid/Desktop/Logging/logdb.db 'insert or ignore into DB2.NonEdited select * from ( select * from Original order by s_id desc limit 10) where s_editedby is NULL order by s_id;'

然后我按如下方式运行test.sh:

watch -n 1 ./test.sh

但是当我运行上面的命令时,我收到以下错误,

Error: no such table: DB2.Edited
Error: no such table: DB2.NonEdited

我在哪里以及我做错了什么?

请注意,当所有三个表都在同一个数据库中时,我不会遇到这个问题而且效果很好。我在logdb.db中检查了附加的数据库,它是正确的:

sqlite> .databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /home/sid/Desktop/Logging/logdb.db                        
2    DB2              /home/sid/Desktop/Logging/logdb2.db                       
sqlite> .tables
DB2.Edited     DB2.NonEdited  Original

可能出了什么问题?任何帮助将不胜感激。

请注意:这是我能做的唯一方法,我无法创建触发器。 (我试图模拟一些实验设置)。

1 个答案:

答案 0 :(得分:0)

ATTACHments不是永久性的;重新打开数据库时,你必须再次执行它们:

sqlite3 .../logdb.db 'ATTACH "..."; INSERT ...;'