我正在使用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
可能出了什么问题?任何帮助将不胜感激。
请注意:这是我能做的唯一方法,我无法创建触发器。 (我试图模拟一些实验设置)。
答案 0 :(得分:0)
ATTACHments不是永久性的;重新打开数据库时,你必须再次执行它们:
sqlite3 .../logdb.db 'ATTACH "..."; INSERT ...;'