ST_DWithin प्रलेखन में कहा गया है कि पहला फ़ंक्शन हस्ताक्षर भूगोल के प्रकारों को स्वीकार करता है न कि ज्यामिति के प्रकारों को:
boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid);
चूंकि (स्थान, ST_SetSRID (ST_MakePoint (20, -30), 4326)) सभी ज्यामिति हैं, यह समझ में आता है कि फ़ंक्शन का निष्पादन गड़बड़ है। और मुझे लगता है कि आपका दूसरा फ़ंक्शन ठीक से काम कर रहा था क्योंकि आप जो निष्पादित कर रहे थे वह यह हस्ताक्षर था :
boolean ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid);
और जैसा कि आपने कहा था कि कॉलम प्रकारों को ज्यामिति के बजाय भूगोल में बदलने से समस्या हल हो जाएगी क्योंकि इससे आपको इसका सही निष्पादन मिलेगा:
boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters);
boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid);
आशा है कि इससे थोड़ी मदद मिलेगी।
संपादित करें:
यह भाग दस्तावेज़ीकरण में मिला जो बताता है कि डेटा प्रविष्टि पर
यह समझा सकता है कि पोस्टग्रेज़ ने ST_DWithin() के आपके पहले आह्वान को क्यों स्वीकार किया क्योंकि पोस्टगिस जाहिर तौर पर इसे भूगोल में डाल देगा, और यह भी बताता है कि निष्पादन में अधिक समय क्यों लगता है और सूचकांक की उपेक्षा करता है क्योंकि प्रत्येक कास्टिंग के परिणामस्वरूप एक नई वस्तु होगी जो अनुक्रमित नहीं है आपका मूल कॉलम।