में बाइटा को डबल परिशुद्धता में कनवर्ट करें मेरे पास एक डेटाबेस है जहां एक तालिका में से किसी अन्य सिस्टम से एकत्र किए गए सभी प्रकार के सामान्य डेटा का ब्लॉब (bytea
) संग्रहीत करता है। bytea
फ़ील्ड में कुछ भी हो सकता है। डेटा को समझने के तरीके के बारे में जानने के लिए, तालिका में एक प्रारूप फ़ील्ड भी है। मैं एक byte[]
के रूप में डेटाबेस से bytea
क्षेत्र को पढ़ने के लिए और उसके बाद मैं आसानी से ByteBuffer
का उपयोग कर और विभिन्न दृश्य (DoubleBuffer
, IntBuffer
, आदि) द्वारा double[]
या int[]
या जो कुछ भी प्रारूप क्षेत्र कहते हैं करने के लिए इसे परिवर्तित कर सकते हैं एक जावा आवेदन में लिखा था।PostgreSQL
अब मेरे पास ऐसी स्थिति है जहां मुझे किसी अन्य तालिका के साथ ईमानदारी बनाए रखने के लिए डेटाबेस पर डेटा के कुछ हेरफेर करने की आवश्यकता है। मैं कल्पना के बारे में किसी भी प्रकार के डेटा के लिए रूपांतरण पा सकता हूं, लेकिन मुझे bytea
(या यहां तक कि bit
) से double precision
और वापस जाने के लिए कुछ भी नहीं मिल रहा है। bytea
टूटा जा सकता है, बिट्स में परिवर्तित किया जा सकता है, और उसके बाद int
या bigint
में परिवर्तित किया जा सकता है, लेकिन double precision
नहीं। उदाहरण के लिए, x'deadbeefdeadbeef'::bit(64)::bigint
कोई समस्या नहीं होने पर -2401053088876216593
में परिवर्तित हो जाएगा, लेकिन x'deadbeefdeadbeef'::bit(64)::double precision
-1.1885959257070704E148
के आईईईई 754 उत्तर देने के बजाय "ERROR: टाइप बिट को डबल परिशुद्धता में नहीं डाला जा सकता" के साथ विफल रहता है।
मुझे यह उत्तर https://stackoverflow.com/a/11661849/5274457 मिला, जो मूल रूप से बिट्स को दोबारा बदलने के लिए आईईईई मानक लागू करता है, लेकिन क्या ऐसा करने के लिए पोस्टग्रेएसक्यूएल में वास्तव में बुनियादी रूपांतरण फ़ंक्शन नहीं है? इसके अलावा, मुझे double precision
से bytea
पर पीछे की तरफ जाने की आवश्यकता है जब मैं डेटा में हेरफेर कर रहा हूं और टेबल को अपडेट करने की आवश्यकता है, जो यह उत्तर प्रदान नहीं करता है।
कोई विचार?
आपको आवश्यक कलाकार जोड़ने के लिए शायद एक साधारण सी एक्सटेंशन की आवश्यकता होगी। पीजी वास्तव में कच्चे बाइनरी रूपों से/कुछ रूपांतरण कार्यों का उपयोग कर सकता है। –
मैं विस्तार विचार को देखूंगा। जो मैं बता सकता हूं, यह सिर्फ एक PostgreSQL समस्या नहीं है। एचएसक्यूएल और एसक्यूएल सर्वर, जो मैं बता सकता हूं, वही समस्या है। मेरे द्वारा उपयोग की जाने वाली प्रत्येक प्रोग्रामिंग भाषा में कच्चे बाइट्स को युगल में बदलने के तरीके हैं, लेकिन SQL डेटाबेस में ऐसा प्रतीत नहीं होता है। – Keith
वे आम तौर पर उच्च स्तर के अमूर्तता पर परिचालन कर रहे हैं। PostgreSQL के साथ, एक व्यावहारिक विकल्प शायद ऐसा करने के लिए एक साधारण plperlu या plpythonu प्रक्रिया का उपयोग करने के लिए है, इस तरह आप एक सी एक्सटेंशन लिखने की जरूरत नहीं है। –