我正在尝试创建一个类似于 tail -f
但针对 sqlite 文件的脚本。
我认为触发器是最好的答案,我尝试了以下方法:
CREATE TEMPORARY TRIGGER "tailf" AFTER INSERT ON "my_table"
BEGIN
SELECT * FROM "my_table" WHERE rowid = NEW.rowid;
END;
这个想法是在插入时,它将把新行打印到标准输出。 不幸的是,当插入表中时,我什么也没得到。
我做错了什么?
另外,假设我可以从 sqlite shell 让它全部工作,那么当其他进程插入表中时它仍然可以工作吗?
最佳答案
当 SQLite 执行 SELECT
命令时,它只是将数据返回给应用程序。
应用程序有责任对数据执行某些操作(例如在 sqlite3
shell 中打印数据)。
在触发器内部,没有应用程序等待SELECT
的结果,因此结果被丢弃。
触发器内 SELECT
命令的唯一目的是调用具有某些副作用的用户定义函数。
理论上,您可以定义自己的用户定义函数来打印某些内容:
CREATE TEMPORARY TRIGGER "tailf" AFTER INSERT ON "my_table"
BEGIN
SELECT print(column1, column2, ...) FROM "my_table" WHERE rowid = NEW.rowid;
END;
但是除非您控制其他进程,否则它们不会为您安装该功能。
关于shell - sqlite 触发器输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14655439/