2010-12-27 14 views
14

प्राथमिक कुंजी स्तंभ की लंबाई की सीमा क्या है? मैं प्राथमिक कुंजी के रूप में वर्चर का उपयोग करने जा रहा हूं। मुझे कोई जानकारी नहीं मिली है, यह कब तक हो सकता है, क्योंकि PostgreSQL को प्राथमिक कुंजी के रूप में उपयोग किए जाने पर वर्कर सीमा निर्दिष्ट करने की आवश्यकता नहीं है?PostgreSQL प्राथमिक कुंजी लंबाई सीमा

+2

मुझे लगता है, मैं इस तरह की प्राथमिक कुंजी में बहुत अधिक डेटा डाल सकता हूं, लेकिन यह एक अच्छा विचार नहीं है। सभी उत्तरों के लिए धन्यवाद। – FolksLord

उत्तर

6

मेरा मानना ​​है कि अधिकतम वर्चर लंबाई एक पोस्टग्रेस कॉन्फ़िगरेशन सेटिंग है। हालांकि, ऐसा लगता है कि यह आकार में 1 जीबी से अधिक नहीं हो सकता है।

http://wiki.postgresql.org/wiki/FAQ#What_is_the_maximum_size_for_a_row.2C_a_table.2C_and_a_database.3F

कहा गया है कि, यह शायद एक अच्छा विचार नहीं है एक प्राथमिक कुंजी के रूप में एक बड़ी varchar स्तंभ है। एक धारावाहिक या bigserial (http://www.postgresql.org/docs/current/interactive/datatype-numeric.html#DATATYPE-SERIAL)

+0

+1 यह नोट करने के लिए कि वर्चर एक खराब पीके है। संदर्भ तालिकाओं के भीतर उपयोग करते समय यह खराब प्रदर्शन देगा (मैंने आपके लिंक को हालिया पीजी संस्करण में बदल दिया है)। – DrColossos

+2

@DrColossos: यह केवल तभी सच है यदि आप किसी अन्य तालिका में विदेशी कुंजी के रूप में कहा गया वर्चर फ़ील्ड का उपयोग कर रहे हैं। यदि उस क्षेत्र को केवल अनन्य होना चाहिए और न केवल * और * केवल उस तालिका में संदर्भित किया गया है, तो एक संख्यात्मक "प्राथमिक कुंजी" जोड़ना वास्तव में आपको चोट पहुंचाएगा। अब आप दोनों संख्यात्मक पी * और * नहीं NULL varchar स्तंभ पर अतिरिक्त अद्वितीय सूचकांक (क्रम में आवश्यक डेटा अखंडता को सुनिश्चित करने) की भूमि के ऊपर उठाना होगा। विदेशी कुंजी के बारे में बात करते समय यह अच्छी सलाह है, लेकिन कहने के लिए "वर्कर एक बुरा पीके है" भ्रामक है। –

+0

@ मैथ्यू फॉलो अप के लिए धन्यवाद: डी विवरण और पूरी तरह से मेरी टिप्पणी की व्याख्या करने के बारे में पूरी तरह से अवगत नहीं था। हालांकि मैं "[...] संदर्भ तालिकाओं के भीतर उपयोग करते समय [...]" स्पष्ट था कि मेरा मतलब विदेशी कुंजी था लेकिन आपने स्पष्ट रूप से इस विषय में अधिक अंतर्दृष्टि दी थी। अब मैं बेहतर जानता हूँ, धन्यवाद! – DrColossos

19

बी-पेड़ इंडेक्स में एक मान के लिए अधिकतम लंबाई, जिसमें प्राथमिक कुंजी शामिल है, डिफ़ॉल्ट मंजिल (8192/3) द्वारा बफर पृष्ठ के आकार का एक तिहाई है, = बाइट्स।

4

आप एक परीक्षण किए हैं।

मैंने टेबल के साथ परीक्षण किए हैं, जिनमें प्राथमिक कुंजी के रूप में सिंगल वर्चर कॉलम है, PostgreSQL 8.4 पर। नतीजा यह है कि मैं 235000 ASCII वर्ण, 116000 पॉलिश diactrical पात्रों स्टोर करने के लिए सक्षम था, है (f.g. 'सी') या 75000 चीनी (f.g. '汉')। बड़े सेट के लिए मुझे एक संदेश मिला है:
BŁĄD: इंडेक्स पंक्ति का आकार 5404 अधिकतम अधिकतम, 2712
से अधिक है, हालांकि, संदेश ने बताया कि:
बफर पृष्ठ के 1/3 से बड़े मानों को अनुक्रमित नहीं किया जा सकता है।
तो मूल्यों, की अनुमति दी गई लेकिन नहीं पूरी स्ट्रिंग विशिष्टता जांच करने के लिए इस्तेमाल किया गया था।

ठीक है, यह उस कॉलम में रखी गई बहुत बड़ी मात्रा में डेटा है। हालांकि, जैसा कि ऊपर बताया गया है, यदि आपको चाबियों के रूप में ऐसे लंबे मूल्यों का उपयोग करना होगा तो आपका डिज़ाइन खराब होगा। आपको कृत्रिम प्राथमिक कुंजी का उपयोग करना चाहिए।

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