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 ответов

18 просмотров

Вы лучше не гуглите, а почитайте документацию. > Есть пример того, как реализовать что-то подобное? Поищите в исходниках 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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта