我正在使用2个数据库说logdb.db和logdb2.db。通过shell脚本将值从一个数据库表插入到其他数据库表中
我创建了一个名为表原始在logdb.db SQLite数据库如如下:
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;
现在,表原件被插入或通过其他用户更新,所以这取决于是被插入,我想将这些值插入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
什么可能出错?任何帮助将非常感激。
请注意:这是我能做的唯一方法,我不能创建触发器。 (我试图模拟一些实验设置)。
所以这是我应该把我的test.sh脚本? – Technopolice 2014-12-04 11:48:53
是的;这是你的test.sh脚本中的一行,附加一个附加。 – 2014-12-04 19:27:18
我试过了。但现在它说数据库被锁定。正如我无法在“原始表格”中插入任何内容 – Technopolice 2014-12-05 07:25:18