2009-01-08 17 views
9

मैं अपने एसक्लाइट डेटाबेस (अधिमानतः सम्मिलित करने के मामले में, तालिका आदि के रूप में डेटाबेस के लिए जारी किए गए बयान) के साथ किए गए सब कुछ वाले लॉग तालिका में सेट (एसक्यूएल के माध्यम से) स्थापित करने का एक तरीका ढूंढ रहा हूं। मुझे यकीन है कि प्रत्येक तालिका पर ट्रिगर सेट करने के माध्यम से ऐसा करने का तरीका है, लेकिन यह सिर्फ इतना काम है और अगर मैं बाद में डेटाबेस की स्कीमा बदलता हूं तो अच्छा नहीं होता है। क्या कोई पकड़-वैश्विक बात है जो डेटाबेस पर काम करती है (जैसे डाटाबेस पर ट्रिगर)?एसक्लाइट डेटाबेस में लॉग टेबल रखते हुए?

मैं भी इतना है कि मैं परिवर्तन पर बाद में महीने पहले देख सकते हैं SQLite डेटाबेस के लिए किया परिवर्तनों का रिकॉर्ड रखने के लिए अन्य सुझावों के लिए खुला रहा हूँ।

(प्रोग्राम के निश्चित रूप से वहाँ तरीके हैं लेकिन मुझे यकीन है कि मेरे कार्यक्रम केवल प्रोग्राम डेटाबेस के लिए लिख है नहीं किया जा सकता)।

+1

यदि डेटाबेस पर कोई ट्रिगर था, तो क्या यह स्वयं आग नहीं होगा? – recursive

उत्तर

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* 
); 

हो सकता है वे अलग-अलग डीबीएस

पर कार्रवाई करने हालांकि निम्नलिखित नहीं है

केवल वैश्विक तरह से मैं देख सकता है

sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); 
int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); 
int sqlite3_vfs_unregister(sqlite3_vfs*); 
+0

फ़ंक्शंस केवल तभी काम करते हैं जब कोई व्यक्ति अपने एपीआई का उपयोग करके डेटाबेस में लिखता है, लेकिन मैं उन तरीकों की तलाश कर रहा हूं जो रिकॉर्ड छोड़ देते हैं जब कोई भी (संभावित रूप से मेरा प्रोग्राम नहीं) डेटाबेस को लिखता है। – polyglot

7

उपयोग करने के लिए लग रहे हैं अपनी सभी आवश्यकताओं को पूरा करें, आप इसे करने का एक तरीका देखना चाहेंगे। Mike Chirico's SQLite Tutorial पर पर एक अनुभाग है जिसमें सभी सम्मिलन, अद्यतन, और हटाए गए लॉगिंग हैं जो MySQL के binlog की कार्यक्षमता की नकल करते हैं।

यह चलाता है कि प्रत्येक तालिका जिसका परिवर्तन आप ट्रैक करना चाहते के लिए स्कीमा से मेल खाना चाहिए पर निर्भर करता है। यही है, अगर आपकी तालिका में "ए" नामक फ़ील्ड है, तो लॉगिंग टेबल को "aOLD" और "aNEW" का ट्रैक रखने की आवश्यकता है। इस तरह, ट्रिगर उस विशेष तालिका में फ़ील्ड में किए गए अपडेट, आवेषण और हटाए गए रिकॉर्ड को रिकॉर्ड करने में सक्षम है।

+0

मैंने कभी भी SQL लाइट का उपयोग नहीं किया है, लेकिन आप स्कीमा को फिर से प्राप्त करने में सक्षम हो जाते हैं और फिर आप एक स्क्रिप्ट बना सकते हैं जो आपके ट्रिगर्स और इतिहास तालिकाओं को अपडेट करता है। –

संबंधित मुद्दे