我正在寻找一种方法来设置(通过SQL)一个日志表,其中包含对我的sqlite数据库所做的所有事情(最好是根据发布到数据库的insert,create table等语句)。我确信有办法通过在每个表上设置触发器来实现它,但这只是太多的工作,如果我稍后更改数据库的模式,那就不好了。是否存在一个对数据库起作用的全局事物(如数据库本身的触发器)?
我也愿意接受其他建议,以便记录对sqlite数据库所做的更改,以便我可以在几个月后回顾这些更改。
(编程当然有方法,但我不能确定我的程序是唯一写入数据库的程序。)
答案 0 :(得分:7)
虽然以下内容不符合您的所有要求,但您可能希望看到一种方法。 Mike Chirico's SQLite Tutorial有一个关于记录所有插入,更新和删除的部分,它模仿了MySQL的binlog功能。
它依赖于必须与您希望跟踪其更改的每个表的架构匹配的触发器。也就是说,如果您的表有一个名为“a”的字段,那么日志记录表需要跟踪“aOLD”和“aNEW”。通过这种方式,触发器能够记录对该特定表中的字段所做的更新,插入和删除。
答案 1 :(得分: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*
);
他们似乎对个人dbs采取行动
我能看到的唯一全球方式是使用
sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
int sqlite3_vfs_unregister(sqlite3_vfs*);