是否将PostgreSQL JSON列升级为JSONB?

是否将PostgreSQL JSON列升级为JSONB?,postgresql,jsonb,Postgresql,Jsonb,升级到PostgreSQL 9.4后,如何将所有JSON列转换为JSONB列 我不介意丢失任何重复的键和空格。在Rails环境中,这里有一个ActiveRecord迁移替代方案: ALTER TABLE t ALTER COLUMN j TYPE jsonb USING j::text::jsonb; def change reversible do |dir| dir.up { change_column :models, :attribute, 'jsonb USING CAS

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


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

在Rails环境中,这里有一个ActiveRecord迁移替代方案:

ALTER TABLE t ALTER COLUMN j TYPE jsonb USING j::text::jsonb;
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
我在一个有120000条记录的表上测试了这一点,每条记录有四列
json
列,我花了大约一分钟的时间迁移该表。当然,这取决于
json
结构的复杂程度

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