Создать оператор/функцию для пользовательского типа в PostgreSQL 9.2

У меня есть следующий пользовательский тип:

CREATE TYPE param_range AS (  
    param smallint,
    range int4range
);  

Следующая таблица:

CREATE TABLE test4
(
    id serial NOT NULL,
    geo point,
    ext param_range[]
)

Следующие индексы:

CREATE INDEX ix_test4_geo ON test4 USING GIST ((geo));
CREATE INDEX ix_test4_ext on test4 USING GIN (ext);

Для индекса GIN требуется оператор/функция для пользовательского типа. Как мне это сделать?


person IamIC    schedule 25.07.2013    source источник


Ответы (1)


Для индекса GIN требуется не только специальный оператор. Для этого требуется целая семья операторов. В основном вам нужно:

  1. Обратитесь к документации по операционным классам GIN.

  2. Напишите набор функций IMMUTABLE для их обработки.

  3. Напишите набор операторов на основе этих функций.

  4. Свяжите их вместе в пользовательском классе операторов.

Это не простой, небольшой объем работы. Однако это требует довольно много времени (что означает «перекрытие» в контексте вашего типа?», поэтому вам нужно ожидать, что вы потратите немало времени на этапе проектирования.

По сути, если вам нужна поддержка GIST/GIN, вы разрабатываете собственный тип не только для хранения, но и для оперативных целей. Это проект.

person Chris Travers    schedule 02.11.2013
comment
Спасибо, Крис. Это пришло ко мне после того, как я углубился в онлайн-документацию, и когда никто не ответил. - person IamIC; 03.11.2013
comment
не могли бы вы немного расширить пункт номер 4? Я задал вопрос здесь: stackoverflow.com/q/34407438/1319179 - person losthorse; 22.12.2015