代码之家  ›  专栏  ›  技术社区  ›  polyglot

在sqlite数据库中保存日志表?

  •  9
  • polyglot  · 技术社区  · 17 年前

    我正在寻找一种方法来设置(通过SQL)一个日志表,其中包含对sqlite数据库所做的所有操作(最好是在发出给数据库的insert、create table等语句方面)。我确信有办法通过在每个表上设置触发器来实现这一点,但这只是太多的工作,如果我以后更改数据库的模式,这并不是一个好兆头。是否有一个全局性的东西在数据库上工作(比如数据库本身的触发器)?

    (程序上当然有办法,但我不能确定我的程序是唯一一个写入数据库的程序)。

    2 回复  |  直到 17 年前
        1
  •  8
  •   Darren Griffith    17 年前

    虽然下面的内容不能满足您的所有要求,但您可能希望找到一种方法来实现它。 Mike Chirico's SQLite Tutorial 有一个关于 记录所有插入、更新和删除 它模仿了MySQL的binlog的功能。

    它依赖的触发器必须与要跟踪其更改的每个表的架构匹配。也就是说,如果您的表有一个名为“a”的字段,那么日志记录表需要跟踪“aOLD”和“aNEW”。这样,触发器就可以记录对该特定表中字段的更新、插入和删除。

        2
  •  0
  •   thkala jaxb    14 年前

    这些功能可能有用

    void *sqlite3_update_hook(
      sqlite3*, 
      void(*)(void *,int ,char const *,char const *,sqlite3_int64),
      void*
    );
    
    void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
    
    void *sqlite3_profile(
       sqlite3*,
       void(*xProfile)(void*,const char*,sqlite3_uint64), void*
    );
    

    它们似乎对单个数据库起作用

    我能看到的唯一全局性的方法就是使用

    sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
    int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
    int sqlite3_vfs_unregister(sqlite3_vfs*);
    
    推荐文章