PostgreSQL का व्यवहार bit
और bit varying
प्रकार अत्यधिक अनुपयोगी है, जिस तरह से यह संचालन के लिए बिटफ़ील्ड का विस्तार करने से इनकार करता है, और यह उन्हें बाएं-विस्तारित करने के बजाय कास्ट के लिए दाएं-विस्तारित करता है।
Pg के लिए विफल होने के बजाय AND या OR ऑपरेशन से पहले छोटे ऑपरेंड को शून्य के साथ बाएँ-विस्तारित करना समझ में आता है।
आप bit(n)
. के लिए कास्ट का उपयोग नहीं कर सकते समान लंबाई पाने के लिए, क्योंकि किसी पागल कारण से bit(n)
राइट-पैड तर्क, इसे लगभग सभी स्थितियों में बेकार बना देता है।
आप lpad($1::text, greatest(length($1), length($2)),'0')::bit varying
जैसी किसी चीज़ का उपयोग कर सकते हैं शून्य के साथ एक बिट फ़ील्ड को दो लंबाई से अधिक तक बाएं-विस्तारित करने के लिए। यह बोझिल है, लेकिन यह काम करेगा। मैं गड़बड़ी को रोकने के लिए रैपर फ़ंक्शन लिखने की सलाह दूंगा।
वैकल्पिक रूप से, bit
. को संशोधित करने पर विचार करें समर्थन कोड src/backend/utils/adt/varbit.c
. में बाएं-विस्तार और बाएं-छंटनी बिट फ़ील्ड में फ़ंक्शन जोड़ने के लिए, और बाएं-विस्तारित तुलना करने के लिए कार्य करता है। मौजूदा कोड के आधार पर यह बहुत आसान होना चाहिए।