postgresql将JSON迁移到JSONB

时间:2015-01-28 20:51:51

标签: postgresql jsonb

在postgresql 9.4中整合了新的JSONB。

在postgresql 9.3中的实时数据库中,我有一个JSON列。

我想将其迁移到JSONB。

假设我首先将数据库迁移到9.4(使用pg_upgrade)。我接下来该怎么办?

2 个答案:

答案 0 :(得分:75)

ALTER TABLE table_with_json
  ALTER COLUMN my_json
  SET DATA TYPE jsonb
  USING my_json::jsonb;

答案 1 :(得分:29)

在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

相关问题