将 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 列保留一些键值并将附加键值添加为空