hstore. Тип данны х для хранения пар ключ/значение внутри одного значения
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext
.
Модуль реализует тип данных hstore
для хранения пар ключ/значение внутри одного значения.
Функциональность может быть полезна для хранения строк со множеством редко анализируемых атрибутов или частично структурированных данных. Ключи и значения задаются простыми текстовыми строками.
Применяемое для ввода и вывода текстовое представление типа hstore
включает ноль или более пар ключ => значение
. Пары разделяются запятыми.
Операторы
Оператор | Результат | Описание | Пример |
---|---|---|---|
hstore -> text | text | Выдает значение для заданного ключа, или NULL , если он отсутствует | 'a=>x, b=>y'::hstore -> 'a' → x |
hstore -> text[] | text[] | Выдает значения, связанные с заданными ключами, или NULL , если таких ключей нет | 'a=>x, b=>y, c=>z'::hstore -> ARRAY['c','a'] → {"z","x"} |
hstore || hstore | hstore | Соединяет два набора hstore | 'a=>b, c=>d'::hstore 'c=>x, d=>q'::hstore → "a"=>"b", "c"=>"x", "d"=>"q" |
hstore ? text | boolean | Набор hstore включает ключ? | 'a=>1'::hstore ? 'a' → t |
hstore ?& text[] | boolean | Набор hstore содержит все указанные ключи? | 'a=>1,b=>2'::hstore ?& ARRAY['a','b'] → t |
hstore ?| text[] | boolean | Набор hstore содержит какой-либо из указанных ключей? | 'a=>1,b=>2'::hstore ? ARRAY['b','c'] → t |
hstore @> hstore | boolean | Левый операнд содержит правый? | 'a=>b, b=>1, c=>NULL'::hstore @> 'b=>1' → t |
hstore <@ hstore | boolean | Левый операнд содержится в правом? | 'a=>c'::hstore <@ 'a=>b, b=>1, c=>NULL' → f |
hstore - text | hstore | Удаляет ключ из левого операнда | 'a=>1, b=>2, c=>3'::hstore - 'b'::text → "a"=>"1", "c"=>"3" |
hstore - text[] | hstore | Удаляет ключи из левого операнда | 'a=>1, b=>2, c=>3'::hstore - ARRAY['a','b'] → "c"=>"3" |
hstore - hstore | hstore | Удаляет из левого операнда пары ключ-значение, совпадающие с парами в правом | 'a=>1, b=>2, c=>3'::hstore - 'a=>4, b=>2'::hstore → "a"=>"1", "c"=>"3" |
anyelement #= hstore | anyelement | Заменяет поля в левом операнде, имеющем составной тип, соответствующими значениями из hstore | ROW(1,3) #= 'f1=>11'::hstore → (11,3) |
%% hstore | text[] | Преобразует hstore в массив перемежающихся ключей и значений | %% 'a=>foo, b=>bar'::hstore → {a,foo,b,bar} |
%# hstore | text[] | Преобразует hstore в двумерный массив ключей-значений | %# 'a=>foo, b=>bar'::hstore → {{a,foo},{b,bar}} |
Функции
Функция | Результат | Описание |
---|---|---|
hstore (record) | hstore | Формирует hstore из записи или кортежа |
hstore (text[]) | hstore | Формирует hstore из двумерного массива или из массива, содержащего перемежающиеся ключи-значения |
hstore (text[], text[]) | hstore | Формирует hstore из отдельных массивов ключей и значений |
hstore (text, text) | hstore | Формирует hstore с одним элементом |
akeys (hstore) | text[] | Извлекает ключи в виде массива |
skeys (hstore) | setof text | Извлекает ключи в виде множества |
avals (hstore) | text[] | Извлекает значения из в виде массива |
svals (hstore) | setof text | Извлекает значения в виде множества |
hstore_to_array (hstore) | text[] | Извлекает ключи и значения из hstore в виде массива перемежающихся ключей и значений |
hstore_to_matrix (hstore) | text[] | Извлекает ключи и значения из hstore в виде двумерного массива |
hstore_to_json (hstore) | json | Преобразует hstore в json , переводя все отличные от NULL значения в строки JSON |
hstore_to_jsonb (hstore) | jsonb | Преобразует hstore в jsonb , переводя все отличные от NULL значения в строки JSON |
hstore_to_json_loose (hstore) | json | Преобразует hstore в json , по возможности распознавая числовые и логические значения и передавая их в JSON без кавычек |
hstore_to_jsonb_loose (hstore) | jsonb | Преобразует hstore в jsonb , по возможности распознавая числовые и логические значения и передавая их в JSON без кавычек |
slice (hstore, text[]) | hstore | Извлекает из hstore подмножество, содержащее только заданные ключи |
each (hstore) | setof record (key text, value text) | Извлекает ключи и значения из hstore в виде набора записей |
exist (hstore, text) | boolean | Набор hstore включает ключ? |
defined (hstore, text) | boolean | Значение hstore содержит отличное от NULL значение для заданного ключа? |
delete (hstore, text) | hstore | Удаляет пару с соответствую щим ключом |
delete (hstore, text[]) | hstore | Удаляет пары с соответствующими ключами |
delete (hstore, hstore) | hstore | Удаляет пары, соответствующие парам во втором аргументе |
populate_record (anyelement, hstore) | anyelement | Заменяет поля в левом операнде, имеющем составной тип, соответствующими значениями из 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.