我正在使用PostgreSQL 9.4。
最初我在 USERS 表格中有 DETAILS 字段,该字段是 HSTORE 字段类型。
我使用以下方法非常轻松地将该列类型从 HSTORE 更新为 JSONB :
ALTER TABLE users ALTER COLUMN details TYPE jsonb USING CAST(details AS jsonb)
我现在面临的问题是我必须编写回滚但我无法找到从 JSONB 转换为 HSTORE 的方法。
我尝试过使用:
ALTER TABLE users ALTER COLUMN details TYPE hstore USING CAST(details AS hstore)
得到了:
ERROR: cannot cast type jsonb to hstore
有人可以帮我这个吗?
提前致谢, 埃塞基耶尔
答案 0 :(得分:2)
如果jsonb值是对{"key":"value",...}
的简单形式,则可以使用此函数:
create or replace function simple_jsonb_to_hstore(jdata jsonb)
returns hstore language sql immutable
as $$
select hstore(array_agg(key), array_agg(value))
from jsonb_each_text(jdata)
$$;
ALTER TABLE users ALTER COLUMN details TYPE hstore USING simple_jsonb_to_hstore(details);