hstore. Тип данных для хранения пар ключ/значение внутри одного значения#
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Модуль реализует тип данных hstore для хранения пар ключ/значение внутри одного значения.
Функциональность может быть полезна для хранения строк со множеством редко анализируемых атрибутов или частично структурированных данных. Ключи и значения задаются простыми текстовыми строками.
Применяемое для ввода и вывода текстовое представление типа hstore включает ноль или более пар ключ => значение. Пары разделяются запятыми.
Операторы#
Оператор |
Результат |
Описание |
Пример |
|---|---|---|---|
|
|
Выдает значение для заданного ключа, или |
|
|
|
Выдает значения, связанные с заданными ключами, или |
|
|
|
Соединяет два набора hstore |
|
|
|
Набор |
|
|
|
Набор |
|
|
|
Набор |
|
|
|
Левый операнд содержит правый? |
|
|
|
Левый операнд содержится в правом? |
|
|
|
Удаляет ключ из левого операнда |
|
|
|
Удаляет ключи из левого операнда |
|
|
|
Удаляет из левого операнда пары ключ-значение, совпадающие с парами в правом |
|
|
|
Заменяет поля в левом операнде, имеющем составной тип, соответствующими значениями из |
|
|
|
Преобразует |
|
|
|
Преобразует |
|
Функции#
Функция |
Результат |
Описание |
|---|---|---|
|
|
Формирует |
|
|
Формирует |
|
|
Формирует |
|
|
Формирует |
|
|
Извлекает ключи в виде массива |
|
|
Извлекает ключи в виде множества |
|
|
Извлекает значения из в виде массива |
|
|
Извлекает значения в виде множества |
|
|
Извлекает ключи и значения из |
|
|
Извлекает ключи и значения из |
|
|
Преобразует |
|
|
Преобразует |
|
|
Преобразует |
|
|
Преобразует |
|
|
Извлекает из |
|
|
Извлекает ключи и значения из |
|
|
Набор |
|
|
Значение |
|
|
Удаляет пару с соответствующим ключом |
|
|
Удаляет пары с соответствующими ключами |
|
|
Удаляет пары, соответствующие парам во втором аргументе |
|
|
Заменяет поля в левом операнде, имеющем составной тип, соответствующими значениями из |
Индексы#
Тип hstore поддерживает индексы GiST и GIN для операторов @>, ?, ?& и ?|.
Класс операторов GIST gist_hstore_ops аппроксимирует набор пар ключ/значение в виде сигнатуры битовой карты. Параметром siglen, опционально, можно задать размер сигнатуры в байтах. Параметр может принимать значения от 1 до 1024, по умолчанию он равен 16. С увеличением размера сигнатуры поиск осуществляется точнее, так как сканируется меньшая область индекса и меньшее количество страниц. Сам индекс становится больше.
Тип hstore также поддерживает индексы btree и hash для оператора =. Это позволяет объявлять столбцы hstore как уникальные (UNIQUE) и использовать их в выражениях GROUP BY, ORDER BY или DISTINCT. Порядок сортировки значений hstore не имеет практического смысла, но эти индексы могут быть полезны для поиска по равенству.
Примечание:
Существуют дополнительные расширения, реализующие трансформации типа
hstoreдля языков PL/Perl и PL/Python:
расширения для PL/Perl называются
hstore_plperlдля доверенного иhstore_plperluдля недоверенного PL/Perl; если установить эти трансформации и указать их при создании функции, значенияhstoreбудут отображаться в хеши Perl;расширения для PL/Python называются
hstore_plpythonu,hstore_plpython2uиhstore_plpython3uи при их использовании значения hstore будут отображаться в словари Python.
Доработка#
Доработка не проводилась.
Ограничения#
Ограничения отсутствуют.
Установка#
Модуль считается «доверенным», поэтому его могут устанавливать пользователи, имеющие право CREATE в текущей базе данных:
CREATE EXTENSION hstore SCHEMA ext;
Настройка#
Не требуется.
Использование модуля#
Добавление ключа или изменение значения для существующего ключа:
UPDATE tab SET h = h || hstore('c', '3');
Удаление ключа:
UPDATE tab SET h = delete(h, 'k1');
Приведение типа record к типу hstore:
CREATE TABLE test (col1 integer, col2 text, col3 text);
INSERT INTO test VALUES (123, 'foo', 'bar');
SELECT hstore(t) FROM test AS t;
Пример результата запроса:
hstore
---------------------------------------------
"col1"=>"123", "col2"=>"foo", "col3"=>"bar"
(1 row)
Создание индекса GIN:
CREATE INDEX hidx ON testhstore USING GIN (h);
Индексы для сравнений с помощью =:
btreeCREATE INDEX hidx ON testhstore USING BTREE (h);hashCREATE INDEX hidx ON testhstore USING HASH (h);
Ссылки на документацию разработчика#
Дополнительно поставляемый модуль hstore: https://www.postgresql.org/docs/15/hstore.html.