After upgrading to PostgreSQL 9.4, how do I convert all my JSON columns into JSONB columns?
I don't mind losing any duplicate keys and whitespace.
After upgrading to PostgreSQL 9.4, how do I convert all my JSON columns into JSONB columns?
I don't mind losing any duplicate keys and whitespace.
ALTER TABLE t ALTER COLUMN j TYPE jsonb USING j::text::jsonb;
在 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
。