2017-06-28 10 views
6

मैं कुछ टूल्स को कनवर्ट करने की प्रक्रिया में हूं जो MySQL का उपयोग PostgreSQL पर कर रहे हैं। इसके साथ में, मैंने कई मुद्दों में भाग लिया है लेकिन अधिकांश चीज़ों को ढूंढने में सक्षम था। मुझे एक समस्या है जिसमें HEX() और UNHEX() है। मैंने encode(%s, 'hex') और decode(%s, 'hex') की कोशिश की है जो वास्तव में मुझे त्रुटियों का कारण बनने से रोकता है, लेकिन यह अभी भी चाल नहीं लग रहा था। क्या किसी को यह पता है कि पोस्टग्रेज़ में उन कार्यों के बराबर क्या होगा? यहाँMySQL के हेक्स() और यूएनएचएक्स() पोस्टग्रेज़ में समकक्ष?

SELECT HEX(test_table.hash), 
     title, 
     user, 
     reason, 
     description, 
     url, 
     performed, 
     comment, 
     authenticated, 
     status 
FROM alerts 
JOIN user_responses ON test_table.hash = user_responses.hash 
JOIN test_status ON test_table.hash = test_status.hash 
WHERE status = %s 

और PostgreSQL प्रारूप में मेरी अद्यतन क्वेरी है:

यहाँ वर्ष MySQL क्वेरी है

SELECT encode(test_table.hash, 'hex') as hash, 
     title, 
     user, 
     reason, 
     description, 
     url, 
     performed, 
     comment, 
     authenticated, 
     status 
FROM test_table 
JOIN user_responses ON test_table.hash = user_responses.hash 
JOIN test_status ON test_table.hash = test_status.hash 
WHERE status = %s 

धन्यवाद!

उत्तर

4
create function hex(text) returns text language sql immutable strict as $$ 
    select encode($1::bytea, 'hex') 
$$; 

create function hex(bigint) returns text language sql immutable strict as $$ 
    select to_hex($1) 
$$; 

create function unhex(text) returns text language sql immutable strict as $$ 
    select encode(decode($1, 'hex'), 'escape') 
$$; 


select hex('abc'), hex(123), unhex(hex('PostgreSQL')); 

परिणाम:

 
╔════════╤═════╤════════════╗ 
║ hex │ hex │ unhex ║ 
╠════════╪═════╪════════════╣ 
║ 616263 │ 7b │ PostgreSQL ║ 
╚════════╧═════╧════════════╝ 

2

मैं Postgres के लिए mysqlcompat पुस्तकालय देखने की अनुशंसा करते हैं, यह Postgres करने के लिए लिया गया MySQL कार्यों की एक पूरी गुच्छा भी शामिल है।

आप HEX या UNHEX फ़ंक्शंस के उनके कार्यान्वयन देख सकते हैं। विशेष रूप से ध्यान दें MySQL के हेक्स समारोह two different modes of working है: तर्क एक स्ट्रिंग है

हैं, बहस में हर किरदार के दो हेक्साडेसिमल अंक में बदल जाती है।

यदि तर्क दशमलव है, तो फ़ंक्शन तर्क के हेक्साडेसिमल स्ट्रिंग प्रस्तुति देता है और लंबे समय तक (BIGINT) संख्या के रूप में व्यवहार किया जाता है।

तो यदि आप अपना खुद का रोल करते हैं, तो सुनिश्चित करें कि आप सभी संभव उपयोग-मामलों का समर्थन करते हैं, जिस तरह से mysqlcompat करता है।

संबंधित मुद्दे