तेज़ और बिना डायनेमिक SQL
टेक्स्ट प्रतिनिधित्व में UUID के प्रमुख 16 हेक्स अंकों को bitstring bit(64)
और उसे bigint
. पर कास्ट करें . देखें:
सुविधाजनक रूप से, दाईं ओर अतिरिक्त हेक्स अंक काट दिए जाते हैं कास्ट में bit(64)
स्वचालित रूप से - ठीक वही जो हमें चाहिए।
Postgres इनपुट के लिए विभिन्न स्वरूपों को स्वीकार करता है। आपका दिया गया स्ट्रिंग अक्षर उनमें से एक है:
14607158d3b14ac0b0d82a9a5a9e8f6e
UUID (और text
. का डिफ़ॉल्ट टेक्स्ट प्रतिनिधित्व डेटा प्रकार uuid
. के लिए Postgres में आउटपुट ) पूर्वनिर्धारित स्थानों पर हाइफ़न जोड़ता है:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
यदि इनपुट प्रारूप भिन्न हो सकता है, तो सुनिश्चित करने के लिए पहले हाइफ़न पट्टी करें:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
वास्तविक कास्ट करें uuid
uuid::text
. के साथ इनपुट करें ।
db<>fiddle यहां
ध्यान दें कि Postgres हस्ताक्षरित . का उपयोग करता है पूर्णांक, इसलिए bigint
ऊपरी हिस्से में ऋणात्मक संख्याओं के लिए अतिप्रवाह - जो इस उद्देश्य के लिए अप्रासंगिक होना चाहिए।
DB डिज़ाइन
यदि संभव हो तो एक bigserial
अंतर्निहित तालिका में कॉलम और इसके बजाय इसका उपयोग करें।