PostgreSQL 9.4将JSON迁移到HSTORE

时间:2016-01-12 14:52:36

标签: json postgresql casting hstore jsonb

我正在使用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

有人可以帮我这个吗?

提前致谢, 埃塞基耶尔

1 个答案:

答案 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);