PostgreSQL 9.4 将 JSON 迁移到 HSTORE

PostgreSQL 9.4 migrate JSON to HSTORE

我正在使用 PostgreSQL 9.4。

最初我在 USERS table 上有一个 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

有人可以帮我解决这个问题吗?

提前致谢, 以斯奎尔

如果jsonb的值是pairs的简单形式{"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);