вести таблицу журналов в базе данных sqlite? - PullRequest
9 голосов
/ 08 января 2009

Я ищу способ настроить (с помощью SQL) таблицу журнала, содержащую все, что было сделано с моей базой данных sqlite (предпочтительно с точки зрения операторов вставки, создания таблицы и т. Д., Выданных в базу данных). Я уверен, что есть способ сделать это с помощью установки триггера для каждой таблицы, но это просто СЛИШКОМ много работы и не сулит ничего хорошего, если я позже изменю схему базы данных. Есть ли универсальная глобальная вещь, которая работает с базой данных (например, триггер на самой базе данных)?

Я также открыт для других предложений по ведению учета изменений, внесенных в базу данных sqlite, чтобы я мог оглядываться на изменения спустя месяцы.

(Программно, конечно, есть способы, но я не могу быть уверен, что моя программа - единственная программа, пишущая в базу данных).

Ответы [ 2 ]

7 голосов
/ 10 января 2009

Хотя следующее не соответствует всем вашим требованиям, вы можете захотеть увидеть один из способов сделать это. Учебник Майка Кирико по SQLite содержит раздел Регистрация всех вставок, обновлений и удалений , который имитирует функциональность binlog MySQL.

Он основан на триггерах, которые должны соответствовать схеме для каждой таблицы, изменения которой вы хотите отслеживать. То есть, если в вашей таблице есть поле с именем «a», то таблица регистрации должна отслеживать «aOLD» и «aNEW». Таким образом, триггер может записывать обновления, вставки и удаления, сделанные в полях этой конкретной таблицы.

0 голосов
/ 08 января 2009

эти функции могут быть полезны

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*);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...