2012-09-24 9 views
9

के साथ पोस्टग्रेस में तार लौटाता है। मैं एक रेल ऐप को mysql (mysql2 मणि) पोस्टग्रेज़ (पीजी मणि) का उपयोग करने से परिवर्तित कर रहा हूं।connection.select_value केवल पीजी मणि

mysql के साथ

, ActiveRecord::Base.connection.select_value कॉल, आंकड़ों के अनुसार आपके द्वारा लिखा गया मान उदाहरण के लिए:

> ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM errors") 
=> 86 
> ActiveRecord::Base.connection.select_value("SELECT exception FROM errors where id=565") 
=> "TechTalk.Genome.SqlExecutionException" 
> ActiveRecord::Base.connection.select_value("SELECT id FROM errors where id=565") 
=> 565 

हालांकि, postgres साथ, connection.select_value हमेशा एक स्ट्रिंग रिटर्न:

> ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM errors") 
=> "1" 
> ActiveRecord::Base.connection.select_value("SELECT id FROM errors") 
=> "1" 
> ActiveRecord::Base.connection.select_value("SELECT source FROM errors limit 1") 
=> "webapp" 

यह कुछ इकाई तोड़ दिया परीक्षण, और जब वे फिक्स करने योग्य हैं, तो मुझे यकीन है कि हमारे पास इन वापसी मूल्यों पर निर्भर अन्य कोड है। पोस्टग्रेज़ का उपयोग करते समय connection.select_value से उचित टाइप किए गए रिटर्न मान प्राप्त करने का कोई तरीका है?

उत्तर

4

संक्षिप्त उत्तर नहीं है। 'पीजी' चालक जानबूझकर देशी 'libpq' चालक के शीर्ष पर जितना संभव हो उतना पतला परत प्रदान करता है। यह टाइपकास्टिंग नहीं करता है, क्योंकि यह उच्च स्तरीय पुस्तकालयों की ज़िम्मेदारी है, जिनके पास उस डोमेन में कुछ अंतर्दृष्टि है जिसमें परिणाम उपयोग किए जाएंगे। इस निर्णय के लिए तर्क on the PostgreSQL Wiki दस्तावेज किया गया है, और मुझे आपके साथ on the mailing list पर चर्चा करने में खुशी होगी।

+4

सबसे खराब जवाब कभी भी! ;) धन्यवाद। –

+0

"देशी 'libpq' ड्राइवर के शीर्ष पर जितना संभव हो उतना पतला परत।" मुसीबत है, रूबी में स्ट्रिंग आवंटन वास्तव में काफी महंगा है, –

+0

लगता है कि यह परिस्थिति का मामला है कि क्या यह प्रत्येक कॉलम के लिए स्ट्रिंग आवंटित करने के लिए अधिक अपर्याप्त है या डिफ़ॉल्ट रूप से PostgreSQL प्रकारों को रूबी में मैप करने का प्रयास करें। यदि आपके कॉलम प्रकारों में रूबी में सटीक न्यूमेरिक-व्युत्पन्न (गैर-बिग्नम) समकक्ष हैं, तो शायद यह स्ट्रिंग्स के रूप में उन सभी का प्रतिनिधित्व करने के लिए अपर्याप्त है। हालांकि, यह अपेक्षाकृत दुर्लभ परिस्थिति में संभावित मेमोरी अपशिष्ट के आधार पर केवल आंशिक रूप से पूर्ण प्रकार-मैपिंग सिस्टम को लागू करने के लिए मेरे लिए गैर जिम्मेदार लगता है। –

0
जो लोग यहां भूमि एक ActiveRecord विशेषताएं (रेल) विशिष्ट जवाब की तलाश कर रहे

: मैं कुछ परीक्षण (https://gist.github.com/gamov/8fe38733012931eb3360) किया है और कहा कि पता चला:

RequestedItem.where(id: 1).select(*, 10 AS tq).first.tq.class 

रेल < 4 और एक के साथ एक स्ट्रिंग रिटर्न रेल के साथ फिक्सम> = 4.

पोस्टग्रेर्स एडाप्टर डीबी से पर्सिस्टेंस मॉड्यूल के प्रकारों को आगे बढ़ाएगा ताकि कास्टिंग पारदर्शी रूप से किया जा सके।

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