hstore
用于存储(键,值)对集合的数据类型
概览
版本
安装
提示:这是 PostgreSQL 内核自带的 contrib 扩展
用法
hstore: 键值对数据类型
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"
运算符
下标访问
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); -- 支持 =
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)