shell - sqlite 触发器输出

标签 shell logging sqlite tail

我正在尝试创建一个类似于 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/

相关文章:

linux - 查找其中出现 2 个给定单词的文件

在本地记录 Azure Service Fabric 服务

Python 脚本从 Bash 脚本运行而不记录

sqlite - SQL 根据另一列的值更新列值

android - 每次构建后自动提取SQLite数据库文件

linux - 为什么这个错误?在 join 或 string 中使用未初始化的值

shell - mvn jetty:在docker容器中 fork ?

linux - 使用 awk 创建文件

.Net Web 服务日志记录

php - 从多个表中获取数据 SQLite