2015-11-04 5 views
12

में सीमा से बाहर पूर्णांक मैं एक फ़ाइल की लंबाई (4825733517) का प्रतिनिधित्व करने वाले नंबर को सहेजने की कोशिश कर रहा हूं। कॉलम पूर्णांक टाइप करने के लिए सेट है। मेरे पास कोई सत्यापन या प्रतिबंध सेट नहीं है।PostgreSQL डेटाबेस

RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4 

क्या मुझे इस मूल्य के लिए कुछ अन्य कॉलम प्रकार का उपयोग करना चाहिए?

उत्तर

22

प्रकार integer के स्तंभों के लिए, :limit मूल्य बाइट्स में अधिकतम स्तंभ लंबाई (documentation) है।

4 बाइट लंबाई के साथ, आप स्टोर कर सकते हैं सबसे बड़ा हस्ताक्षरित पूर्णांक 2,147,483,647 है, जो 4,825,733,517 के आपके मूल्य से छोटा है। आप बाइट सीमा बढ़ा सकते हैं, उदाहरण के लिए 8 बाइट्स एक लंबे पूर्णांक (bigint PostgreSQL type) होने के लिए, यह आपको हस्ताक्षर किए गए मानों को 9, 223,372,036,854,775,807 तक स्टोर करने की अनुमति देगा।

तुम एक प्रवास के साथ ऐसा कर सकते हैं rails generate migration change_integer_limit_in_your_table की तरह कुछ के साथ इसे बनाने के लिए, और निम्नलिखित कोड:

class ChangeIntegerLimitInYourTable < ActiveRecord::Migration 
    def change 
    change_column :your_table, :your_column, :integer, limit: 8 
    end 
end 
+1

एफवाईआई यह एक अच्छा जवाब है और * लगभग * मेरे लिए काम किया है। ** ** ** काम करता था, वही वाक्यविन्यास था, लेकिन 'update_column' के बजाय' change_column' था। मैं रेल 4.2.6 का उपयोग कर रहा हूं तो शायद "update_column" को बहिष्कृत किया गया है। –

+0

आप बिल्कुल सही हैं - 'update_column' बस गलत है, मुझे इसे लिखने पर अन्य उत्तरों से गलत क्यू हो सकता है। पोस्ट को संपादित किया, इसे इंगित करने के लिए धन्यवाद – p4sh4

0

(रेल 4.2.4 पर) आप एक प्रवास के साथ अपने डेटाबेस में स्तंभ की लंबाई को बदल देना चाहिए:

update_column :my_table, :my_column, :integer, limit: 12 

यह आप बड़ा पूर्णांक स्टोर करने के लिए अनुमति देगा।

+0

12 बाइट्स पूरी तरह से overkill है, और यह भी PostgreSQL में उपलब्ध सांख्यिक प्रकार के अनुरूप नहीं है। – p4sh4

+0

मैंने अभी 12 को एक उदाहरण के रूप में रखा है। हम उस अधिकतम पूर्णांक को भी नहीं जानते जिसे उसे सहेजने की आवश्यकता होगी। – Caillou

4

the PostgreSQL documentation के अनुसार एक पूर्णांक की संख्या -2147483648 से +2147483647 तक है। तो इस प्रकार के लिए आपका नंबर बड़ा है।

अपना कॉलम अपडेट करें और यह इंगित करने के लिए पैरामीटर सीमा का उपयोग करें कि आप bigint चाहते हैं।

change_column :table, :column, :integer, limit: 8 
संबंधित मुद्दे