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.