PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL за итерация през редове и намиране на най-близкото съвпадение с помощта на персонализирана функция за разстояние

Най-общо казано, можете да решите този тип проблеми, като използвате съхранена функция, написана на Java или Scala (някои може да предпочетат PL/SQL, C или C++).

PostgreSql поддържа (базирани на Java) съхранени функции, така че оставете SQL заявката да извлече данните и да ги предаде на съхранена функция. Съхранената функция връща разстоянието, така че можете да филтрирате/сортирате и т.н. върху нея.

Въз основа на таблица като тази

създаване на точка на таблица(вектор float8[]);вмъкване в стойности на точки('{0.0, 0.0, 0.0}');вмъкване в стойности на точки('{0.5, 0.5, 0.5}'); 

с функция на Java като тази:

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[]) ВРЪЩА float8 КАТО 'PlJava.distance2' НЕИЗМЕНЕН ЕЗИК java; 

вашата заявка може да изглежда така:

изберете точка.*, pljava.distance2(vector, '{1.0, 1.0, 1.0}') като разстояние от точка ред по разстояние;  

което води до

<пре> вектор | dist ---------------+------------------- {0.5,0.5,0.5} | 0,866025403784439 {0,0,0} | 1.73205080756888

Актуализиране

Съхранените функции могат да бъдат написани и на C и C++. 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. Как да се свържете с база данни Heroku postgres от локална връзка в php

  2. pg_dump игнорира последователност от таблици?

  3. Какъв е еквивалентът на PostgreSQL за ISNULL()

  4. Postgres АКТУАЛИЗАЦИЯ с помощта на функцията за прозорец за ранг

  5. Текстово търсене в Django с частично съвпадение на изречения, актуализация на django3