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