मेरे पास निम्न लेआउट में संग्रहीत नेटवर्क में सबनेट्स की एक बड़ी सूची है। इसका उपयोग संपत्तियों को स्टोर करने के लिए एक मास्टर टेबल के रूप में किया जाता है जिसका प्रयोग नियमित अंतराल पर पाइथन-स्क्रिप्ट द्वारा स्थिति की जांच के लिए किया जाएगा।पोस्टग्रेएसक्यूएल व्यक्तिगत पते में सीडर का विस्तार
CREATE TEMP TABLE tmp_networks (
network cidr PRIMARY KEY
);
चलें मान अपने प्रदर्शन के लिए इन मूल्यों के साथ भरा:
- 10.0.0.0/8
- 10.0.1.0/24
- 192.168.0.0/24
जब मैं स्क्रिप्ट चलाता हूं, तो पाइथन-स्क्रिप्ट किसी भी ओवरलैप को हटाने के लिए निम्न क्वेरी निष्पादित करेगी:
SELECT network
FROM tmp_networks
WHERE NOT EXISTS (
SELECT network
FROM tmp_networks n
WHERE n.network >> tmp_networks.network
);
यह एक छोटे से मुद्दे को छोड़कर, महान काम करता है; मेरे पास व्यक्तिगत पतों की एक सूची भी है जिसे नौकरी से बाहर रखा जाना चाहिए।
CREATE TEMP TABLE tmp_except (
address inet PRIMARY KEY
);
चलें यह मान दिए गए पते में शामिल हैं::
- 10.0.0.100
- 192.168.0.10
अब, मैं नाकाम रहे हैं यह भी डेटाबेस में एक मेज है डेटाबेस आउटपुट से इन शानदार पते को हटाने के लिए एक अच्छी विधि खोजने के लिए। मेरे विचार में, समाधान होगा की तरह कुछ:
- सभी सबनेट
- चयन यदि कोई अपवाद पता सबनेट भीतर पाया जाता है, छोटे टुकड़ों में विभाजित सबनेट जब तक एक अपवाद पता हटाया जा सकता है और अन्य सभी पते
मैंने जांच करने की कोशिश की है कि शुद्ध PostgreSQL में ऐसा कुछ करना संभव है, लेकिन इसे हल करने के किसी भी तरीके को खोजने में विफल रहे हैं। इस बात के बारे में कोई संकेतक कैसे हल किया जाना चाहिए?
आपकी क्वेरी से आप क्या परिणाम चाहते हैं? क्या यह हमेशा * पते (/ 32) * है या यह * नेटवर्क पते यदि संभव हो और केवल पते, अगर कोई अपवाद है *? – Beryllium
हाय, यदि संभव हो तो मैं नेटवर्क पते को छोड़कर या/32 यदि कोई बड़ा ब्लॉक मौजूद नहीं है। – agnsaft