2010-07-06 9 views
6

पर तालिका संशोधनों की ऑडिटिंग/वर्जनिंग को कैसे कार्यान्वित करें हम PostgreSQL पर जावा/स्प्रिंग/हाइबरनेट का उपयोग कर एक नई प्रणाली को कार्यान्वित कर रहे हैं। टेबल्स में रिकॉर्ड (ओं) पर एक संशोधन/हटाना जैसे ही इस प्रणाली को प्रत्येक रिकॉर्ड की प्रतिलिपि बनाने की आवश्यकता होती है। बाद में, उपयोगकर्ताओं को डेटा प्रदर्शित करने के लिए लेखापरीक्षा तालिकाओं की रिपोर्ट से पूछताछ की जाएगी।PostgreSQL

मैं इस ऑडिटिंग/वर्जनिंग फीचर को टेबल पर ट्रिगर करके कार्यान्वित करने की योजना बना रहा था जो संशोधित पंक्ति (हटाई गई पंक्ति) की प्रतिलिपि "TO" को एक टैबलेट ENTITY_VERSIONS कहलाएगा जिसमें लगभग 20 कॉलम होंगे कोलो 1, कॉल 2, कोलो 3, कॉल 4, आदि कहा जाता है जो कॉलम को उपर्युक्त तालिका से स्टोर करेगा; हालांकि, समस्या यह है कि यदि सभी तालिकाओं के संस्करणों को संग्रहीत करने के लिए 1 से अधिक तालिका संस्करण और केवल 1 टैर्गेट तालिका (ENTITY_VERSIONS) है, तो मैं TARGET तालिका कैसे डिज़ाइन करूं?

या यह बेहतर है कि संस्करण की आवश्यकता वाले प्रत्येक तालिका के लिए संस्करण तालिका की प्रतिलिपि होगी?

यदि ऑडिटिंग/वर्जनिंग को लागू करने के लिए पोस्टग्रेएसक्यूएल ट्रिगर्स (और संबंधित संग्रहीत प्रक्रिया) कोड की ओर कुछ पॉइंटर्स साझा किए जाएंगे तो यह बोनस होगा।

पीएस: मैंने Suggestions for implementing audit tables in SQL Server? पर देखा और उत्तर की तरह थोड़े को छोड़कर मुझे पता नहीं चलेगा कि OldValue और NewValue किस प्रकार का होना चाहिए?

पीपीएस: यदि टेबल्स हार्ड डिलीट्स के बजाय सॉफ़्ट डिलीट्स (प्रेत डिलीट्स) का उपयोग करते हैं, तो क्या आपकी कोई सलाह बदलती है?

उत्तर

4

मेरे पास उस तालिका के संस्करणों को रखने के लिए प्रत्येक तालिका की एक प्रति होगी जो आप रखना चाहते हैं। यह एक वैश्विक संस्करण तालिका को बनाए रखने और उपयोग करने के लिए एक दुःस्वप्न की तरह लगता है।

This link पोस्टग्रेज़ दस्तावेज़ में पोस्टग्रेज़ में कुछ ऑडिट ट्रिगर उदाहरण दिखाते हैं।

+0

+1 धन्यवाद। मुझे आश्चर्य है कि "वैश्विक लेखापरीक्षा तालिका" बनाम "प्रत्येक तालिका के लिए लेखापरीक्षा तालिका" होने की ताकत w.r.t रिपोर्टिंग के लिए डेटा पूछताछ कर रही है? – anjanb

+1

यदि आप किसी भी तरह से ग्लोबल ऑडिट तालिका का प्रबंधन करते हैं, तो मैं टाइप कास्टिंग के ALOT को देखता हूं। मेरा मतलब है ... आप सभी कॉलम किस प्रकार स्टोर करेंगे? – rfusca

+0

rfusca: ठीक है। हाँ, यह मेरा संदेह भी था! – anjanb

2

वैश्विक तालिका में सभी कॉलम एकल कॉलम में hstore प्रकार के रूप में संग्रहीत किए जा सकते हैं। मैंने अभी ऑडिट की कोशिश की और मैं बहुत अच्छा काम करता हूं, मैं इसकी अनुशंसा करता हूं। बहुत बढ़िया ऑडिट तालिका उदाहरण उन तालिकाओं पर एक ट्रिगर जोड़कर एकल तालिका में सभी परिवर्तनों को ट्रैक करता है जिन्हें आप ऑडिट इतिहास को चालू रखना चाहते हैं। सभी परिवर्तन hstore प्रकार के रूप में संग्रहीत हैं- v 9.1+ this link