将 PostgreSQL JSON 列升级到 JSONB?

Posted

技术标签:

【中文标题】将 PostgreSQL JSON 列升级到 JSONB?【英文标题】:Upgrade PostgreSQL JSON column to JSONB? 【发布时间】:2015-03-20 11:02:31 【问题描述】:

升级到 PostgreSQL 9.4 后,如何将我的所有 JSON 列转换为 JSONB 列?

我不介意丢失任何重复的键和空格。

【问题讨论】:

【参考方案1】:
ALTER TABLE t ALTER COLUMN j TYPE jsonb USING j::text::jsonb;

【讨论】:

【参考方案2】:

在 Rails 的上下文中,这是一个 ActiveRecord 迁移替代方案:

def change
  reversible do |dir|
    dir.up  change_column :models, :attribute, 'jsonb USING CAST(attribute AS jsonb)' 
    dir.down  change_column :models, :attribute, 'json USING CAST(attribute AS json)' 
  end
end

我在一个有 120 000 条记录的表上对此进行了测试,每条记录有四个 json 列,我花了大约一分钟来迁移该表。当然,这取决于json 结构的复杂程度。

另外,请注意,如果您现有的记录有默认值,您必须在上述语句中添加default: ,否则您将拥有jsonb 列,但默认值将保持为''::json.

【讨论】:

以上是关于将 PostgreSQL JSON 列升级到 JSONB?的主要内容,如果未能解决你的问题,请参考以下文章

将嵌套的 JSON 从 PostgreSQL 的多对多连接表返回到 node.js

将 json 字典列转换为键值对行(Redshift+Postgresql)

PostgreSQL:具有选择性列的 row_to_json [重复]

Postgresql 更新 JSON 列保留一些键值并将附加键值添加为空

如何使用 PySpark 将 JSON 列类型写入 Postgres?

将数据从 PostgreSQL 迁移到 MongoDB