PostgreSQL 8.4 का उपयोग करते हुए, पोस्टग्रेज में बाइट को टेक्स्ट वैल्यू में कैसे बदलें?


16

अपने आवेदन में मैं सी कोड का उपयोग करके डेटाबेस में डेटा सम्मिलित करता हूं, क्योंकि मैं एक अविश्वसनीय स्रोत से प्राप्त होने वाले तार से मैं उन्हें PQescapeByteaConnlibpq लाइब्रेरी का उपयोग करके बच गया हूं । जो पूरी तरह से ठीक काम कर रहा है यानी ऑक्टेट प्रारूप स्ट्रिंग में परिणाम। नीचे उदाहरण देखें,

इनपुट स्ट्रिंग : \n\t\f\b\p\k\j\l\mestPrepared

आउटपुट स्ट्रिंग: \\012\\011\\014\\010pkjlmestPrepared

डेटाबेस में आउटपुट स्ट्रिंग डाला जाता है। अब मैं JDBC का उपयोग करके एक जावा कोड में डेटाबेस से उस डेटा को पुनः प्राप्त करता हूं। मैं स्ट्रिंग को उसके मूल मान से कैसे हटा सकता हूं?

मैंने दो संभावित दृष्टिकोणों के बारे में सोचा,

  1. डेटाबेस पुनर्प्राप्ति क्वेरी को बदलें और इस फ़ील्ड को पोस्टग्रेज के किसी भी स्ट्रिंग हेरफेर फ़ंक्शन से गुजारें अर्थात जो पाठ से पाठ में परिवर्तित हो सकता है।
  2. जावा कोड में डिकोडिंग करें।

मैं समझ सकता हूं कि दृष्टिकोण 1 अधिक कुशल होगा। मैंने यहां सूचीबद्ध लगभग सभी कार्यों की कोशिश की है, लेकिन कुछ भी काम नहीं कर रहा है। कृपया सहायता कीजिए!!

मैं एक linux मशीन पर पोस्टग्रेज के 8.4 संस्करण का उपयोग कर रहा हूं।


2
JDBC ड्राइवर को बाइटा को डिकोड करना चाहिए। इसमें गलत क्या है ResultSet.getBytes()?
डैनियल वेरिटा

@ DanielVérité मैं कोशिश करूंगा और आपको इसके बारे में बता दूं
अमित

जवाबों:


8

क्या आपने प्रारूप के encode(data bytea, format text)साथ प्रयास किया है escape। उस वाक्य रचना formatमें इनमें से कोई भी हो सकता है,

  • बेस 64
  • हेक्स
  • पलायन

इसलिए encode(E'123\\000456'::bytea, 'hex')बाइट को हेक्स-एन्कोडेड के रूप में आउटपुट करेगा।


यह सवाल पर एक टिप्पणी होनी चाहिए, जब तक कि आप सुनिश्चित नहीं हैं कि यह समस्या को हल करता है। यदि यह समस्या को हल करता है, तो क्या आप इस बारे में विस्तार से बता सकते हैं कि यह भविष्य के पाठकों के लाभ के लिए क्यों और कैसे काम करता है?
मैक्स वर्नोन

@ वल्गोग मैं पहले ही कोशिश कर चुका हूं ..
अमित

6

BYTEA को TEXT में परिवर्तित करने के लिए आपको पाठ के आंतरिक एन्कोडिंग को जानना होगा। एन्कोडिंग को जाने बिना, कुछ भी नहीं है जो आप कर सकते हैं। एक सामान्य textकॉलम में, डेटाबेस टेक्स्ट को स्टोर करता है जो कुछ भी SERVER_ENCODINGसेट किया गया है। उदाहरण के लिए, आपके उदाहरण में \nअनुवाद हो जाता है \012। खैर, यह एन्कोडिंग की एक संपत्ति है। यह ब्रह्मांड के लिए निष्पक्ष रूप से सच नहीं है।

यदि आप जानते हैं कि एन्कोडिंग, यह सरल है, लेकिन ..

  1. हम आपके इनपुट स्ट्रिंग को एन्कोडेड शाब्दिक के रूप में लेते हैं।
  2. हम encodeइसे। यह एक बचा हुआ स्ट्रिंग (प्रकार text) पैदा करता है ।
  3. फिर हमें एक प्रकार का प्राप्त करने के लिए इसे वापस डिकोड करना होगा bytea
  4. अब byteaहमें वापस जाने की अनुमति नहीं देता है text। हमें यह बताना होगा कि कौन सा पाठ प्रारूप byteaउपयोग में है convert_from। हम इसे यूटीएफ -8 बताते हैं।

यहाँ एक उदाहरण है।

SELECT convert_from(decode(x, 'escape'), 'UTF-8')
FROM encode(E'\n\t\f\b\p\k\j\l\mestPrepared'::bytea, 'escape')
  AS t(x);

5

अनुयायियों के लिए, क्योंकि यह "पाठ को बाइटी में परिवर्तित करने" के लिए विहित प्रश्न प्रतीत होता है (यानी इसलिए आप इसे वास्तव में pgAdmin आदि में देख सकते हैं)। यहां बताया गया है कि इसे कैसे देखा जा सकता है:

select encode(table.your_column_name, 'escape') as some_name from table_name

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.