मैं https://www.postgresql.org/docs/11/ को उद्धृत कर रहा हूं। INCLUDE खंड के संबंध में sql-createindex.html:

इंडेक्स में गैर-कुंजी कॉलम जोड़ने के बारे में रूढ़िवादी होना बुद्धिमानी है, विशेष रूप से विस्तृत कॉलम। यदि कोई अनुक्रमणिका टपल अनुक्रमणिका प्रकार के लिए अनुमत अधिकतम आकार से अधिक है, तो डेटा प्रविष्टि विफल हो जाएगी। किसी भी मामले में, गैर-कुंजी कॉलम इंडेक्स की तालिका से डेटा डुप्लिकेट करते हैं और इंडेक्स के आकार को ब्लोट करते हैं, इस प्रकार संभावित रूप से धीमी खोज करते हैं।

मैं सोच रहा हूं कि यह index tuple max size btree अनुक्रमणिका के लिए क्या है जो सम्मिलित करने में विफल हो सकता है।

केस का उपयोग करें: मैं INCLUDE एक json कॉलम (<1000 वर्ण) को एक अद्वितीय अनुक्रमणिका में डालने पर विचार कर रहा हूं।

1
Pyrocks 15 सितंबर 2019, 18:13

1 उत्तर

सबसे बढ़िया उत्तर

यह ब्लॉक आकार का एक कार्य है, जो कि बीट्री इंडेक्स के लिए 1/3 से थोड़ा कम है। डिफ़ॉल्ट 8kB ब्लॉक आकार के लिए, अधिकतम 2704 बाइट्स है:

insert into foo select string_agg(x::text,'') from generate_series(1,940) f(x);
ERROR:  index row size 2728 exceeds btree version 4 maximum 2704 for index "foo_pkey"
4
jjanes 15 सितंबर 2019, 21:20