PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL पंक्तियों के माध्यम से पुनरावृति और कस्टम दूरी-फ़ंक्शन का उपयोग करके निकटतम मिलान खोजने के लिए

सामान्यतया आप जावा या स्काला में लिखे गए संग्रहीत फ़ंक्शन का उपयोग करके इस प्रकार की समस्याओं को हल कर सकते हैं (कुछ पीएल/एसक्यूएल, सी या सी ++ पसंद कर सकते हैं)।

PostgreSql (जावा आधारित) संग्रहीत कार्यों का समर्थन करता है, इसलिए SQL क्वेरी को डेटा लाने दें, और इसे एक संग्रहीत फ़ंक्शन में पास करें। संग्रहीत फ़ंक्शन दूरी लौटाता है, ताकि आप उस पर फ़िल्टर/सॉर्ट आदि कर सकें।

इस तरह की तालिका के आधार पर

create table point(vector float8[]);
insert into point values('{0.0, 0.0, 0.0}');
insert into point values('{0.5, 0.5, 0.5}');

जावा फ़ंक्शन के साथ इस तरह:

public class PlJava {
    public final static double distance2(double[] v1, double[] v2) {
        return Math.sqrt(Math.pow(v2[0] - v1[0], 2)
          + Math.pow(v2[1] - v1[1], 2) + Math.pow(v2[2] - v1[2], 2));
    }
}

और SQL में फंक्शन डिक्लेरेशन:

CREATE FUNCTION pljava.distance2(float8[], float8[])
  RETURNS float8
  AS 'PlJava.distance2'
  IMMUTABLE
  LANGUAGE java;

आपकी क्वेरी कुछ इस तरह दिख सकती है:

select
    point.*, 
    pljava.distance2(vector, '{1.0, 1.0, 1.0}') as dist
  from
    point 
  order by
    dist;    

जिसके परिणामस्वरूप

    vector     |       dist  
---------------+-------------------  
 {0.5,0.5,0.5} | 0.866025403784439  
 {0,0,0}       |  1.73205080756888  

अपडेट करें

संग्रहीत कार्यों को सी और सी ++ में भी लिखा जा सकता है। C++ को अधिक प्रयास की आवश्यकता है, क्योंकि PostgreSql का इंटरफ़ेस C कॉलिंग कन्वेंशन का उपयोग कर रहा है। देखें एक्सटेंसिबिलिटी के लिए C++ का उपयोग करना



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रेल में कच्ची क्वेरी पोस्ट करने के लिए पैरा पास करने का कोई तरीका है?

  2. समूहन/एकत्रीकरण के दौरान सरणी मानों को संयोजित/मर्ज करें

  3. PostgreSQL दो डेटाटाइम/टाइमस्टैम्प के बीच एक यादृच्छिक डेटाटाइम/टाइमस्टैम्प प्राप्त करें

  4. [] गॉर्म और पोस्टग्रेज के साथ jsonb को स्ट्रिंग

  5. Postgresql में कॉलम से हटाए गए मेरे डेटाबेस सीरियल को पुनर्स्थापित करने के बाद