172 похожих чатов

Привет. Вопрос по классам операторов. Я гуглил, но по этой теме

очень мало примеров.

Я хочу сделать свой тип вида:
create type int_ev as (
e int[],
v int[]
);

И хочу индексировать его с помощью GIN.
Но поле e содержит метаданные и в поиске участвовать не должно.
Т.е. мой тип - это обертка над массивом в поле v, и я хочу чтобы по нему можно было искать и индексировать его как массив.
И были бы доступны операторы
int_ev && int[], int_ev <@ int[], int_ev @> int[], int_ev == int[]

Есть пример того, как реализовать что-то подобное?
Нужно писать сишные функции? или будет достаточно pl/pgsql?

5 ответов

16 просмотров

Вы лучше не гуглите, а почитайте документацию. > Есть пример того, как реализовать что-то подобное? Поищите в исходниках PostgreSQL (возможно, в contrib). Хотя именно такого, как Вы хотите, я там сходу не помню... > Нужно писать сишные функции? Скорее всего, да (но это не точно).

Mikhail-Kuzmin Автор вопроса
Yaroslav Schekin
Вы лучше не гуглите, а почитайте документацию. > ...

спасибо, и еще такой момент я пролистал документацию и не понял, чтобы gin индекс работал для моего типа, мне нужно реализовать какие операторы? https://www.postgresql.org/docs/current/gin-builtin-opclasses.html тут где 4 оператора реализовано, где 2, а где вообще 6

Mikhail Kuzmin
спасибо, и еще такой момент я пролистал документац...

Те четыре, которые Вам нужны, по идее: int_ev && int[], int_ev <@ int[], int_ev @> int[], int_ev == int[] А вот для индексирования нужно реализовать вот это: https://www.postgresql.org/docs/current/gin-extensibility.html Кстати, зачем Вы всё это делаете? Не легче было бы как-то извернуться с функциональными индексами и т.п.? ;)

Mikhail-Kuzmin Автор вопроса
Yaroslav Schekin
Те четыре, которые Вам нужны, по идее: int_ev && i...

по поводу операторов, да мне нужно эти 4, а вопрос в общем, вот есть тип и я хочу его индексировать gin, как понять, я вообще смогу это сдлать, т.е. какие номера операторов нужно реализовать. Например, если я реализовал второй оператор, то должен ли я реализовать первый? Номер оператора - это число, что указывается при объявлении op class. а в моем случае, да, функциональный индекс должен сработать. Кстати, можете объяснить, почему он так странно задается? create index i on t using gin( v(f) ); а не create index i on t using gin( (f).v ); при этом Index "public.i" Column | Type | Key? | Definition --------+---------+------+------------ v | integer | yes | ((f).v) gin, for table "public.t"

Mikhail Kuzmin
по поводу операторов, да мне нужно эти 4, а вопрос...

По первому вопросу я сходу не помню (но это было описано в документации, я практически уверен), извините. > Кстати, можете объяснить, почему он так странно задается? > а не create index i on t using gin( (f).v ); Потому что мало скобок. ;) CREATE INDEX ON t USING gin( ((f).v) ); А первая запись — это functional notation для композитных типов, см. https://www.postgresql.org/docs/current/rowtypes.html#ROWTYPES-USAGE

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
как быть с принтером? такой подход прокатит?
zamtmn
12
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Карта сайта