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

pol*_*lot 9 sql sqlite

我正在寻找一种方法来设置(通过SQL)一个日志表,其中包含对我的sqlite数据库所做的所有事情(最好是根据发布到数据库的insert,create table等语句).我确信有办法通过在每个表上设置触发器来实现它,但这只是太多的工作,如果我稍后更改数据库的模式,那就不好了.是否存在一个对数据库起作用的全局事物(如数据库本身的触发器)?

我也愿意提供其他建议来保存对sqlite数据库所做更改的记录,以便我可以在几个月后回顾这些更改.

(编程当然有方法,但我不能确定我的程序是唯一写入数据库的程序).

小智 7

虽然以下内容不符合您的所有要求,但您可能希望看到一种方法.Mike Chirico的SQLite教程有一个关于记录所有插入,更新和删除的部分,它模仿MySQL的binlog功能.

它依赖于必须与您希望跟踪其更改的每个表的架构匹配的触发器.也就是说,如果您的表有一个名为"a"的字段,那么日志记录表需要跟踪"aOLD"和"aNEW".通过这种方式,触发器能够记录对该特定表中的字段所做的更新,插入和删除.


小智 0

这些功能可能有用

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*
);
Run Code Online (Sandbox Code Playgroud)

他们似乎对个别数据库起作用

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

sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
int sqlite3_vfs_unregister(sqlite3_vfs*);
Run Code Online (Sandbox Code Playgroud)