【问题标题】:how to use "dbstat" table in a trigger in sqlite?如何在sqlite的触发器中使用“dbstat”表?
【发布时间】:2021-08-25 06:06:34
【问题描述】:

我需要限制我的表大小以假设 10 Mb 使用 dbstat 我想为它创建一个触发器,但我遇到错误 SQL 错误:不安全使用虚拟表“dbstat”

下面是触发查询:

CREATE TRIGGER less_den_ten_mb BEFORE INSERT ON mqtt6 BEGIN DELETE FROM mqtt6 WHERE timestamp=(select min(timestamp) from mqtt6 where 1=(SELECT sum(pgsize)>1024000 from dbstat where name="mqtt6"));结束;

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    如果您在其statConnect() 函数中查看the source for the virtual table,您会看到

    sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY);
    

    来自the documentation的深处:

    从虚拟表实现的xConnectxCreate 方法中调用sqlite3_vtab_config(db,SQLITE_VTAB_DIRECTONLY) 形式的调用会禁止从触发器和视图中使用该虚拟表。

    所以你不能在触发器中使用dbstat。这是 sqlite 3.31.0 中添加的安全功能的一部分。原理和推理有further details,有兴趣的话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多