2012-01-07 10 views
5

मैं एक परीक्षण SQLite डेटाबेस से एक PostgreSQL डेटाबेस में माइग्रेट कर रहा हूं।Django और PostgreSQL - प्रकार के चरित्र के लिए बहुत लंबा मूल्य (512)

मेरे पास एक नमूना ऑब्जेक्ट है जो डेटाबेस में डाला गया है, जो SQLite पर काम करता है लेकिन मुझे PostgreSQL में एक त्रुटि दे रहा है।

कोड स्निपेट है:

car = CarItem.objects.create(
    user = motor_trend, 
    name = 'Camaro 2010', 
    category = cars, 
    condition = 'Used', 
    price = '28,547.00', 
    production_year = '2010', 
    color_interior = 'Black', 
    color_exterior = 'Inferno Orange Metallic', 
    reference = 'PRC17288', 
    location_of_creation = 'Undisclosed', 
    location_current = 'Columbus, OH, USA', 
    description = 'GORGEOUS ORANGE SS!!', 
) 
car.save() 

मैं एक हो रही है:

DatabaseError at /create/ 
value too long for type character varying(512) 

Traceback 
(...) 
    description = 'GORGEOUS ORANGE SS!!', 
(...) 

अपने मॉडल के वर्णन क्षेत्र 512 अधिकतम चार लंबाई है:

description = models.CharField(max_length=512,default='') 

लेकिन वहाँ है कोई रास्ता नहीं है कि स्ट्रिंग 512 बाइट्स से अधिक है।

मैंने इस त्रुटि के बारे में पिछली पोस्ट पढ़ी हैं, जो एन्कोडिंग का जिक्र करती है। मामला प्रतीत नहीं होता है।

मुझे वेबफैक्शन पर होस्ट किया गया है। मैंने utf-8 एन्कोडिंग के साथ एक डेटाबेस बनाया, और syncdb का उपयोग करने के लिए आगे बढ़े। सिंकडब ने पूरी तरह से काम किया लेकिन अब यह ऑब्जेक्ट सम्मिलन विफल रहता है।

क्या कोई कुछ इनपुट दे सकता है? धन्यवाद।

उत्तर

4

कुछ Django documentation में खुदाई करने के बाद:

चरित्र क्षेत्रों

किसी भी है कि VARCHAR स्तंभ प्रकार के साथ जमा हो जाती है क्षेत्रों अगर आप अद्वितीय प्रयोग कर रहे हैं उनके MAX_LENGTH 255 अक्षरों तक ही सीमित है यह सच है = क्षेत्र के लिए

जोर मेरा। क्या आपके पास क्षेत्र के लिए unique=True है? यह एक Django प्रतिबंध है, PostgreSQL दिमाग में नहीं होगा। आप डेटा प्रकार text पर स्विच करना चाह सकते हैं। Django parlance में TextField


पुराने विचारों:

user एक reserved word in PostgreSQL और किसी भी एसक्यूएल मानक है। कॉलम नाम के रूप में इसका इस्तेमाल न करें।

इसका उपयोग कर सकते हैं, यदि आप इसे डबल कोट्स में संलग्न करते हैं, लेकिन उस मूर्खता से दूर रहें। पहचानकर्ताओं के लिए आरक्षित शब्दों का उपयोग न करें। कभी।

भी ...

user = motor_trend, 
name = 'Camaro 2010', 
category = cars, 

कोई विशेष कारण है कि motor_trend और cars अन्य मूल्यों की तरह उद्धृत नहीं कर रहे हैं? @Ignacio की तरह विदेशी कुंजी टिप्पणी की?

+0

क्योंकि वे विदेशी कुंजी हैं। और Django के ओआरएम शायद क्षेत्र के नामों को सही ढंग से उद्धृत करता है। –

+0

हां, वे पहले से परिभाषित Django चर हैं, कुछ तार, अन्य वस्तुओं। हालांकि, क्या यह वर्णन समस्या से संबंधित है? क्या तथ्य यह है कि मेरे पास एक उपयोगकर्ता फ़ील्ड है जिसमें विवरण समस्या है? –

+0

@VascoPatricio: समस्या से कोई स्पष्ट कनेक्शन नहीं, नहीं। जैसा कि कुछ भी स्पष्ट नहीं था, मैं कुछ भी संदिग्ध शिकार कर रहा था। मैंने मैनुअल में खोला और सोचा कि मुझे अब कुछ मिला है। मेरे जवाब में संशोधन, एक नज़र डालें। –

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