cube. Тип данных для представления многомерных кубов#

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Модуль реализует тип данных cube для представления многомерных кубов, а также предоставляет класс операторов индекса GiST для значений cube.

Индекс GiST для значений cube может применяться в целях поиска значений в выражениях со следующими операторами:

  • =;

  • &&;

  • @> в предложениях WHERE;

  • <@ в предложениях WHERE.

Доработка#

Доработка не проводилась.

Ограничения#

Ограничения отсутствуют.

Установка#

Модуль считается «доверенным», поэтому его могут устанавливать обычные пользователи, имеющие право CREATE в текущей базе данных:

CREATE EXTENSION cube SCHEMA ext;

Настройка#

Настройка не требуется.

Использование модуля#

В таблице показаны операторы, предназначенные специально для работы с типом cube:

Оператор

Описание

cube && cube boolean

Кубы пересекаются?

cube @> cube boolean

Первый куб содержит второй?

cube <@ cube boolean

Первый куб содержится во втором?

cube -> integer float8

Выдает n-ю координату куба (считая с 1)

cube ~> integer float8

Выдает n-ю координату куба, применяя следующую нумерацию: n = 2 * k - 1 обозначает нижнюю границу k-й размерности, а n = 2 * k – верхнюю. Отрицательные значения n обозначают обратное значение соответствующей положительной координаты. Этот оператор предназначен для поддержки KNN-GiST

cube <-> cube float8

Вычисляет евклидово расстояние между двумя кубами

cube <#> cube float8

Вычисляет расстояние городских кварталов (метрику L-1) между двумя кубами

cube <=> cube float8

Вычисляет расстояние Чебышева (метрику L-бесконечность) между двумя кубами

Примеры использования:

  • эффективный поиск ближайшего соседа точки в трехмерном пространстве (0.5, 0.5, 0.5):

    SELECT c FROM test ORDER BY c <-> cube(array[0.5,0.5,0.5]) LIMIT 1;
    
  • использование оператора ~> может эффективно выдавать первые несколько значений, отсортированных по выбранной координате. Например, чтобы получить первые несколько кубов, упорядоченных по возрастанию первой координаты (левого нижнего угла), можно использовать следующий запрос:

    SELECT c FROM test ORDER BY c ~> 1 LIMIT 5;
    
  • получение двумерных кубов, отсортированных по убыванию первой координаты правого верхнего угла:

    SELECT c FROM test ORDER BY c ~> 3 DESC LIMIT 5;
    

Ссылки на документацию разработчика#

Дополнительно поставляемый модуль cube: https://www.postgresql.org/docs/15/cube.html.