hstore

用于存储(键,值)对集合的数据类型

概览

扩展包名版本分类许可证语言
hstore1.8TYPEPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
3970hstore-
相关扩展intarray prefix semver unit pgpdf pglite_fusion md5hash asn1oid
下游依赖hstore_pllua hstore_plluau hstore_plpython3u pg_readme pg_readme_test_extension

版本

PG18PG17PG16PG15PG14
1.81.81.81.81.8

安装

提示:这是 PostgreSQL 内核自带的 contrib 扩展

CREATE EXTENSION hstore;

用法

hstore: 键值对数据类型

hstore 扩展提供了一种键/值对数据类型,用于在单个列中存储半结构化数据。

CREATE EXTENSION hstore;

基本用法

SELECT 'name => Alice, age => 30'::hstore;
SELECT 'name => Alice'::hstore -> 'name';           -- Alice
SELECT 'a => 1, b => 2'::hstore ? 'a';              -- true
SELECT 'a => 1'::hstore || 'b => 2'::hstore;        -- "a"=>"1", "b"=>"2"

运算符

运算符描述示例
->按键获取值h -> 'key'
||连接h1 || h2
?包含键h ? 'key'
?&包含所有键h ?& ARRAY['a','b']
?|包含任一键h ?| ARRAY['a','b']
@>包含h @> 'a=>1'
<@被包含h <@ 'a=>1, b=>2'
-删除键h - 'key'h - ARRAY['a','b']

下标访问

SELECT h['name'] FROM mytable;
UPDATE mytable SET h['age'] = '31';

函数

-- 构造
SELECT hstore('key', 'value');
SELECT hstore(ARRAY['a','b'], ARRAY['1','2']);
SELECT hstore(ROW(1, 'hello'));

-- 提取
SELECT akeys(h);                    -- 键的 text 数组
SELECT avals(h);                    -- 值的 text 数组
SELECT skeys(h);                    -- 键的集合
SELECT svals(h);                    -- 值的集合
SELECT each(h);                     -- (key, value) 记录集合

-- 查询
SELECT exist(h, 'key');             -- 布尔值
SELECT defined(h, 'key');           -- 值非 NULL 时返回 true

-- 修改
SELECT delete(h, 'key');
SELECT slice(h, ARRAY['a','b']);    -- 键的子集

-- JSON 转换
SELECT hstore_to_json(h);
SELECT hstore_to_jsonb(h);
SELECT hstore_to_json_loose(h);    -- 区分数字/布尔值

-- 记录转换
SELECT populate_record(NULL::my_table, h);

索引支持

CREATE INDEX idx ON t USING gin (h);    -- 支持 @>、?、?&、?|
CREATE INDEX idx ON t USING gist (h);   -- 支持 @>、?、?&、?|
CREATE INDEX idx ON t USING btree (h);  -- 支持 =
CREATE INDEX idx ON t USING hash (h);   -- 支持 =

最后修改 2026-03-12: update extension pages (f579993)