JsQuery
JsQuery — язык запросов к типу данных jsonb, появившемуся в PostgreSQL версии 9.4. Основное предназначение — предоставить дополнительную функциональность для jsonb, например, простой и эффективный способ поиска во вложенных объектах и массивах, а также дополнительные операторы сравнения с поддержкой индексов.
JsQuery — язык запросов к типу данных jsonb, появившемуся в PostgreSQL версии 9.4. Основное предназначение — предоставить дополнительную функциональность для jsonb (в настоящее время отсутствующую в PostgreSQL), например, простой и эффективный способ поиска во вложенных объектах и массивах, а также дополнительные операторы сравнения с поддержкой индексов. Мы надеемся, что в будущем jsquery станет частью PostgreSQL.
Расширение JsQuery содержит тип jsquery
, представляющий весь запрос JSON в виде одного значения (как и tsquery
для полнотекстового поиска). В этом запросе задаётся выражение, обращающееся к документам JSON.
Расширение JsQuery содержит два класса операторов для GIN, которые реализуют различные варианты оптимизации запросов.
-
jsonb_path_value_ops
-
jsonb_value_path_ops
В этих классах GIN документы jsonb раскладываются на элементы. Каждый элемент сопоставляется с определённым значением и своим путём. Различаются эти классы операторов тем, как в них представлены элементы, как они сравниваются и используются для оптимизации поиска.
Классы операторов JsQuery выполняют сложную оптимизацию запросов. Для разработчика или администратора очень ценно иметь возможность видеть результаты такой оптимизации. Но к сожалению, классы операторов не могут добавлять что-либо своё в вывод EXPLAIN. Именно поэтому JsQuery предоставляет следующие функции, позволяющие увидеть, как конкретный класс операторов оптимизирует заданный запрос.
-
gin_debug_query_path_value(jsquery) — для jsonb_path_value_ops
-
gin_debug_query_value_path(jsquery) — для jsonb_value_path_ops
Эти функции выдают текстовое представление дерева запросов, листьями в котором являются записи, искомые в индексе GIN.
Документация: JsQuery
Репозиторий: https://github.com/postgrespro/jsquery
Расширения Postgres