以下是使用 hstore 和 PG-8.4 for debian 回答的步骤。
1)如果尚未安装,请安装 contrib 包
# apt-get 安装 postgresql-contrib-8.4
2)在相关数据库中安装hstore
$ psql -U postgres -d 数据库名
# \i /usr/share/postgresql/8.4/contrib/hstore.sql
2bis) 如果没有安装plpgsql语言,安装它(还是在psql里面作为postgres用户)
# 创建语言 plpgsql;
3) 创建以 hstore 作为输入的函数。这是 plpgsql 中的一个示例,它仅枚举键和值:
CREATE OR REPLACE function enum_hstore(in_h hstore) returns void
as $$
declare
kv record;
begin
for kv in select * from (select (each(in_h)).*) as f(k,v) loop
raise notice 'key=%,value=%',kv.k,kv.v;
end loop;
end
$$ language plpgsql;
4)调用函数。由于键和值是文本类型,因此可能需要将非文字条目转换为文本,就像问题中的 current_timestamp 调用一样。例子:
select enum_hstore(
hstore('c',current_timestamp::text) ||
'a=>2,b=>5'::hstore
);
上述函数的预期结果:
注意:键=a,值=2
注意:键=b,值=5
注意:key=c,value=2012-04-08 16:12:59.410056+02