आपका प्रारंभिक प्रयास सही है लेकिन इस पर भरोसा करने के लिए आपको (आंशिक) btree अनुक्रमणिका और बिटमैप अनुक्रमणिका स्कैन का उपयोग करने की आवश्यकता है:
create index on product(((ext->'size')::int)) where ((ext->'size') is not null);
द्रव्यमान के लिए समान, और यदि योजनाकार इसे मौके पर नहीं मिलता है, तो दो जहां खंड जोड़ें, यानी where ext->'size' is not null
और द्रव्यमान के लिए समान।
यदि किसी प्रकार का कोई पैटर्न है (जो संभव है, क्योंकि आकार वाले अधिकांश उत्पादों का द्रव्यमान भी होता है), तो संभावित रूप से दो - एक थैली, दूसरी desc को मिलाकर एक बहु-स्तंभ अनुक्रमणिका बनाएं।
जिन इंडेक्स को आपने लिखा था, साथ में क्वेरी (सिंटैक्स त्रुटि के साथ) मूल रूप से वही काम करेगा लेकिन अनियंत्रित; यह धीमा होगा।