मैं एक संपूर्ण तालिका को हैश मान में घुलन करने का एक काफी प्रभावी तरीका चाहता हूं।मैं postgresql में पूरी तालिका का हैश कैसे प्राप्त कर सकता हूं?
मैं कुछ उपकरण है कि पूरे डेटा तालिकाओं, जो तब इतने पर आगे तालिकाओं उत्पन्न करने के लिए इस्तेमाल किया जा सकता है, और उत्पन्न की है। मैं बिल्ड रनों को समन्वयित करने और काम को दोहराने से बचने के लिए एक सरल निर्माण प्रणाली को लागू करने की कोशिश कर रहा हूं। मैं इनपुट टेबल के हैंश रिकॉर्ड करने में सक्षम होना चाहता हूं ताकि मैं बाद में जांच कर सकूं कि वे बदल गए हैं या नहीं। एक टेबल बनाने में मिनट या घंटे लगते हैं, इसलिए कई सेकंड बिल्डिंग हैश खर्च करना स्वीकार्य है।
एक हैक जिसका मैंने उपयोग किया है वह सिर्फ pg_dump के आउटपुट को md5sum पर पाइप करना है, लेकिन इसके लिए नेटवर्क पर पूरे टेबल डंप को स्थानीय बॉक्स पर हैश करने के लिए उसे स्थानांतरित करने की आवश्यकता है। आदर्श रूप में मैं डेटाबेस सर्वर पर हैश का उत्पादन करना चाहता हूं।
Finding the hash value of a row in postgresql मुझे एक समय में एक पंक्ति के लिए हैश की गणना करने का एक तरीका देता है, जिसे किसी भी तरह जोड़ा जा सकता है।
किसी भी सुझाव की सराहना की जाएगी।
पोस्ट करने के लिए संपादित करें जो मैंने समाप्त किया: tinychen का जवाब सीधे मेरे लिए काम नहीं करता था, क्योंकि मैं स्पष्ट रूप से 'plpgsql' का उपयोग नहीं कर सका। जब मैंने एसक्यूएल में फ़ंक्शन को कार्यान्वित किया, तो यह काम करता था, लेकिन बड़ी टेबल के लिए बहुत अक्षम था। तो सभी पंक्तियों को जोड़कर और फिर हैशिंग करने के बजाय, मैंने "रोलिंग हैश" का उपयोग करने के लिए स्विच किया, जहां पिछले हैश को पंक्ति के पाठ प्रस्तुतिकरण के साथ संयोजित किया गया है और फिर अगले हैश का उत्पादन करने के लिए इसे धोया गया है। यह बहुत बेहतर था; स्पष्ट रूप से लाखों अतिरिक्त समय पर छोटे स्ट्रिंग्स पर एमडी 5 चलाना लाखों बार छोटे तारों को संयोजित करने से बेहतर है।
create function zz_concat(text, text) returns text as
'select md5($1 || $2);' language 'sql';
create aggregate zz_hashagg(text) (
sfunc = zz_concat,
stype = text,
initcond = '');
मैं यह करने के लिए किसी भी तरह से अनजान हूँ। मेरा पहला वृत्ति तालिका निर्माण को लॉग इन करना और टाइमस्टैम्प की तुलना करना होगा। – mikerobi
मुझे लगता है कि आप सर्वर पर pg_dump कमांड नहीं चला सकते हैं, है ना? –
@ जॉय: +1। बहुत व्यावहारिक, शायद सबसे तेज़। इसे एक उत्तर बनाओ। – Thilo