是否将PostgreSQL JSON列升级为JSONB?
升级到PostgreSQL 9.4后,如何将所有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
我不介意丢失任何重复的键和空格。在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