Re: OPERATOR CLASS

From: Dmitry E(dot) Oboukhov <unera(at)debian(dot)org>
To: Nikita Glukhov <n(dot)gluhov(at)postgrespro(dot)ru>
Cc: "pgsql-ru-general(at)lists(dot)postgresql(dot)org" <pgsql-ru-general(at)lists(dot)postgresql(dot)org>
Subject: Re: OPERATOR CLASS
Date: 2019-04-11 02:40:01
Message-ID: 2084391554950401@myt2-cd7fa496c4f7.qloud-c.yandex.net
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

<div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">11.04.2019, 01:58, "Nikita Glukhov" &lt;n(dot)gluhov(at)postgrespro(dot)ru&gt;:</div><blockquote xmlns="http://www.w3.org/1999/xhtml" type="cite"><div bgcolor="#FFFFFF"><p>&gt; Есть вопросы по сабжу.<br /><br />&gt; 1. Можно ли как-то их просматривать в консоли (команды \d* не нашел).<br /><br />У нас есть патч для psql, который реализует требуемые команды для показа информации об опклассах.<br />(см. тред "Psql patch to show access methods info"  <a rel="noopener noreferrer" href="https://www.postgresql.org/message-id/flat/1529675324.14193.5.camel%40postgrespro.ru">https://www.postgresql.org/message-id/flat/1529675324.14193.5.camel%40postgrespro.ru</a>)<br />Но он, к сожалению, уже не войдет в PostgreSQL 12.<br /><br />Пример вывода этих команд для интересующего Вас jsonb_path_ops:</p></div></blockquote><div xmlns="http://www.w3.org/1999/xhtml"><br />шикарно! будем ждать патча в релизе, а пока будем делать селекты :)</div><div xmlns="http://www.w3.org/1999/xhtml">спасибо!</div><blockquote xmlns="http://www.w3.org/1999/xhtml" type="cite"><div bgcolor="#FFFFFF"> </div></blockquote><div xmlns="http://www.w3.org/1999/xhtml"> </div><blockquote xmlns="http://www.w3.org/1999/xhtml" type="cite"><div bgcolor="#FFFFFF"> <p>&gt; 2. Можно ли как-то определить свой класс операторов по методу "такой же как оператор класс с таким-то именем, но оператор сравнения у него вот такой?"<br />&gt; 3. Если п.2 нельзя, то можно ли вынуть из сабжа ссылки на его функции/операторы как-то?<br /><br />Создать новый опкласс на основе имеющегося, переопределяя только лишь некоторые его операторы или функции, к сожалению, невозможно.<br />Но, используя CREATE OPERATOR CLASS, действительно можно выполнить эту задачу, вручную добавив в него все переиспользумые операторы и функции, помимо своего оператора сравнения. Как получить ссылки на функции/операторы — описано выше.</p></div></blockquote><div xmlns="http://www.w3.org/1999/xhtml"><br />:)</div><div xmlns="http://www.w3.org/1999/xhtml">я пока погрепал по исходникам и нашел структуру - сделал то же самое.</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">спасибо за более простой способ</div><blockquote xmlns="http://www.w3.org/1999/xhtml" type="cite"><div bgcolor="#FFFFFF"> </div></blockquote><div xmlns="http://www.w3.org/1999/xhtml"> </div><blockquote xmlns="http://www.w3.org/1999/xhtml" type="cite"><div bgcolor="#FFFFFF"> FUNCTION 1 btint4cmp,  FUNCTION 2 gin_extract_jsonb_path,  FUNCTION 3 gin_extract_jsonb_query_path,  FUNCTION 4 gin_consistent_jsonb_path,  FUNCTION 6 gin_triconsistent_jsonb_path, STORAGE integer;</div></blockquote><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">А вот по этим функциям где-то можно почитать разъяснения?</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">насколько я понимаю функция 1 - сравнивает именно то, что возвращает функция 2</div><div xmlns="http://www.w3.org/1999/xhtml">функция 3 нужна за тем же зачем и функция 2, но она работает над запросом</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">то есть если у нас</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">WHERE json_field @&gt; json_query</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">то реально получается следующее</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">json_field пропускается через функцию 2 при индексировании</div><div xmlns="http://www.w3.org/1999/xhtml">json_query - пропускается через функцию 3 при самом запросе</div><div xmlns="http://www.w3.org/1999/xhtml">функция 1 используется для сравнения двух элементов между собой</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">а вот функции 4 и 6 - они для чего используются?</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">и вот еще вопрос. Некоторые из этих функций принимают internal в виде аргументов, соответственно вызвать их и посмотреть их поведение прямо из SELECT - непонятно как.</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">соответственно непонятно - как полностью с нуля написать свой OPERATOR CLASS не используя программирование на C (допустим хотим сделать скетч на SQL, возможно ли это сделать?)</div>

Attachment Content-Type Size
unknown_filename text/html 6.0 KB

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Nikita Glukhov 2019-04-11 10:31:43 Re: OPERATOR CLASS
Previous Message Nikita Glukhov 2019-04-10 22:58:09 Re: OPERATOR CLASS