【问题标题】:PostgreSQL 9.4 migrate JSON to HSTOREPostgreSQL 9.4 将 JSON 迁移到 HSTORE
【发布时间】:2016-01-12 14:52:36
【问题描述】:

我使用的是 PostgreSQL 9.4。

最初,我的 USERS 表中有一个 DETAILS 字段,它是 HSTORE 字段类型。

我很容易使用以下方法将该列类型从 HSTORE 更新为 JSONB

ALTER TABLE users ALTER COLUMN details TYPE jsonb USING CAST(details AS jsonb)

我现在面临的问题是我必须编写回滚,但我无法找到从 JSONB 转换为 HSTORE 的方法。 p>

我尝试过使用:

ALTER TABLE users ALTER COLUMN details TYPE hstore USING CAST(details AS hstore)

得到:

ERROR: cannot cast type jsonb to hstore

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

提前致谢, 以西结

【问题讨论】:

    标签: json postgresql casting hstore jsonb


    【解决方案1】:

    如果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);
    

    【讨论】:

    • 函数可以是不可变的。答案更新了。谢谢。
    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 2014-08-07
    • 2015-03-27
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2019-10-16
    相关资源
    最近更新 更多