PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेएसक्यूएल बिटवाइज़ ऑपरेटर बिट भिन्न के साथ नहीं कर सकते हैं और विभिन्न आकारों के बिट स्ट्रिंग्स नहीं कर सकते हैं

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 . में बाएं-विस्तार और बाएं-छंटनी बिट फ़ील्ड में फ़ंक्शन जोड़ने के लिए, और बाएं-विस्तारित तुलना करने के लिए कार्य करता है। मौजूदा कोड के आधार पर यह बहुत आसान होना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy के साथ PostgreSQL ILIKE क्वेरी

  2. किसी फ़ंक्शन के पैरामीटर के रूप में सरणियों की एक सरणी पास करना

  3. बहुत अधिक कॉलम वाली तालिका के नुकसान

  4. डिफ़ॉल्ट टाइमस्टैम्प को अभी () + n दिनों में कैसे सेट करें?

  5. Postgres में एक डेटाबेस से दूसरे डेटाबेस में तालिका की पंक्तियों के सबसेट को कॉपी करने का सबसे अच्छा तरीका क्या है?