हर काम के लिए पूरे डेटाबेस की ज़रूरत नहीं होती। जब आप स्थानीय रूप से कोई फ़ीचर बना रहे होते हैं, तो आप शायद ही कभी चाहते हैं कि एक पूरा प्रोडक्शन डंप आपकी डिस्क भर दे और इम्पोर्ट होने में एक घंटा ले। आप बस उन गिनी-चुनी टेबलों को चाहते हैं जिन्हें फ़ीचर वास्तव में छूता है।
यही बात तब भी सही है जब आप किसी एक टेबल को डीबग कर रहे हों — orders में किसी डेटा समस्या को दोहराने के लिए बाकी 126 टेबलों की ज़रूरत नहीं होती — या आंशिक माइग्रेशन कर रहे हों, जहाँ केवल कुछ ही टेबल किसी नई सेवा में जाती हैं। इन सभी मामलों में सवाल एक ही है: मैं एक विशाल डंप में से बस ये टेबल साफ़-सुथरे और तेज़ी से कैसे निकालूँ?
sed/grep का तरीका और यह क्यों टूटता है
क्लासिक जवाब यह है कि फ़ाइल को sed से उन सेक्शन हेडर के बीच काटा जाए जो mysqldump प्रत्येक टेबल के लिए लिखता है:
# mysqldump फ़ाइल से users टेबल निकालें
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
यह चतुराई भरा दिखता है, और एक छोटे, साफ़-सुथरे डंप पर शायद एक बार काम भी कर जाए। एक वास्तविक 7 GB फ़ाइल पर यह कई सूक्ष्म तरीकों से बिखर जाता है:
- मल्टी-लाइन INSERT। एक अकेला
INSERT INTO ... VALUESहज़ारों लाइनों तक फैल सकता है।sedऔरgrepजैसे लाइन-आधारित टूल उन रो को बीच से काट देते हैं और एक ऐसी फ़ाइल बनाते हैं जो पार्स नहीं होगी। - बैकटिक और विशेष अक्षर। कॉलम मानों में
--, सेमीकोलन, बैकटिक, कोट्स और स्ट्रिंग के भीतर न्यूलाइन होते हैं। आपका पैटर्न डेटा के भीतर मौजूद टेक्स्ट से मेल खा जाता है जिसे कभी सीमांकक बनाने का इरादा ही नहीं था। - सबस्ट्रिंग के रूप में टेबल नाम।
userनिकालने परuser_roles,user_sessionsऔरpassword_userभी पकड़ में आ जाती हैं, क्योंकि नाम दूसरों के सबस्ट्रिंग के रूप में दिखता है। - कमेंट और हेडर बदलते रहते हैं। सटीक कमेंट टेक्स्ट MySQL, MariaDB और PostgreSQL संस्करणों के बीच अलग होता है, और
pg_dumpतो वही हेडर इस्तेमाल ही नहीं करता — इसलिए वही कमांड चुपचाप कुछ नहीं लौटाता। - कोई फ़ॉरेन की जागरूकता नहीं। अगर आप
ordersको बिल्कुल सही भी काट लें, तो भी उसकी रोusersको संदर्भित करती हैं।sedको इसका कोई पता नहीं, इसलिए निकाली गई फ़ाइल एक फ़ॉरेन की त्रुटि के साथ इम्पोर्ट होने में विफल हो जाती है।
आप grep पर sed पर awk ढेर लगाते रहते हैं, सबसेट पर परीक्षण करते हैं, और फिर भी परिणाम पर भरोसा नहीं कर पाते। इससे बेहतर एक तरीका है।
DumpCleaner के साथ टेबल निकालें
DumpCleaner डंप को सही ढंग से पार्स करता है — यह स्टेटमेंट सीमाओं, मल्टी-लाइन INSERT, बैकटिक और कमेंट को समझता है — इसलिए यह हमेशा सही लाइनों पर काटता है। आपकी ज़रूरत की टेबल निकालने में चार चरण लगते हैं:
- अपना
.sqlडंप अंदर खींचें। DumpCleaner फ़ाइल को स्ट्रीम करता है, इसलिए 7 GB का डंप पूरी चीज़ लोड करने के बजाय स्थिर मेमोरी के साथ खुलता है। - स्वतः-पहचानी गई टेबल सूची पढ़ें। हर टेबल को पार्स करके उसकी रो संख्या और आकार के साथ सूचीबद्ध किया जाता है — यह देखने के लिए लाखों लाइनों में स्क्रॉल करने की ज़रूरत नहीं कि वहाँ क्या है।
- अपनी मनचाही टेबल चुनें।
users,ordersऔरproductsपर टिक करें, या*_logsजैसा रेगेक्स / एक्सक्लूड पैटर्न टाइप करें ताकि पूरे समूह एक झटके में हट जाएँ। - फ़ॉरेन की पैरेंट शामिल करें और एक्सपोर्ट करें। वैकल्पिक रूप से संदर्भित पैरेंट टेबल को स्वचालित रूप से खींच लें, फिर एक साफ़, इम्पोर्ट-योग्य फ़ाइल एक्सपोर्ट करें।
कुछ चीज़ें इसे शेल टूल की तुलना में बहुत कम झंझट भरा बनाती हैं:
- एक्सक्लूड पैटर्न जैसे
*_logsया*_sessionsदर्जनों टेबलों को हाथ से अनटिक किए बिना ऑडिट और सेशन के शोर को हटा देते हैं। - रेगेक्स फ़िल्टर आपको उपसर्ग, प्रत्यय या किसी भी पैटर्न से मिलान करने देते हैं — उदाहरण के लिए,
shop_*से मेल खाने वाली हर चीज़ रखें। - एक लाइव प्रीव्यू दिखाता है कि जैसे-जैसे आप चयन बदलते हैं, आउटपुट में ठीक कौन-सी टेबल आएँगी।
- एक अनुमानित आउटपुट आकार एक्सपोर्ट करने से पहले बताता है कि निकाली गई फ़ाइल कितनी बड़ी होगी, ताकि आप जानें कि यह स्थानीय रूप से समा जाएगी।
- फ़ॉरेन की डिपेंडेंसी स्वचालित रूप से शामिल की जा सकती हैं, इसलिए
ordersचुनने परusersचुपचाप साथ आ जाती है और निकाली गई फ़ाइल बिना कंस्ट्रेंट त्रुटियों के इम्पोर्ट होती है।
बस वे टेबल जो आपको चाहिए — और कुछ नहीं
DumpCleaner किसी भी आकार के डंप से विशिष्ट टेबल निकालता है — स्ट्रीमिंग के साथ, स्थिर मेमोरी में, और आपके लिए हल की गई फ़ॉरेन की के साथ। नेटिव macOS और iPadOS ऐप, एकमुश्त खरीद।
App Store पर डाउनलोड करेंअक्सर पूछे जाने वाले प्रश्न
क्या मैं एक बार में कई टेबल निकाल सकता हूँ?
हाँ। जितनी चाहें उतनी टेबल पर टिक करें — users, orders और products एक साथ — और DumpCleaner उन सभी को एक ही पास में एक अकेली फ़ाइल में लिख देता है।
क्या यह फ़ॉरेन की डिपेंडेंसी बनाए रखता है?
वैकल्पिक रूप से, हाँ। फ़ॉरेन की डिपेंडेंसी शामिल करें चालू करें और आपके चयन द्वारा संदर्भित कोई भी पैरेंट टेबल स्वचालित रूप से खींच ली जाती है, ताकि निकाली गई फ़ाइल बिना कंस्ट्रेंट त्रुटियों के इम्पोर्ट हो।
क्या मैं पैटर्न के अनुसार टेबल को बाहर रख सकता हूँ?
हाँ। *_logs या *_sessions जैसे एक्सक्लूड पैटर्न, या एक रेगुलर एक्सप्रेशन का उपयोग करें, ताकि एक-एक करके अनटिक करने के बजाय टेबलों के पूरे समूह हटा दें।
क्या यह PostgreSQL के साथ काम करता है?
हाँ। DumpCleaner MySQL, MariaDB और PostgreSQL (pg_dump) डंप पढ़ता है, और टेबल निकालते समय public.users जैसे स्कीमा-योग्य नामों को संभालता है।
sed और grep से जूझना बंद करें
खींचें, अपनी टेबल चुनें, एक्सपोर्ट करें। DumpCleaner किसी भी डंप में से आपकी ज़रूरत की टेबल — उनकी फ़ॉरेन की के साथ — बिल्कुल सही निकालता है।
App Store पर डाउनलोड करें