Trong bối cảnh Rails, đây là một ActiveRecord di cư thay thế:
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
Tôi không biết làm thế nào này so với câu trả lời chấp nhận hiệu suất-khôn ngoan, nhưng tôi thử nghiệm này trên một bảng với 120 000 bản ghi, mỗi bản ghi có bốn cột json
và tôi mất khoảng một phút để di chuyển bảng đó. Tất nhiên, tôi đoán nó phụ thuộc vào mức độ phức tạp của cấu trúc json
.
Ngoài ra, hãy chú ý rằng nếu hồ sơ hiện tại của bạn có giá trị mặc định của {}
, bạn phải thêm vào những điều khoản trên default: {}
, bởi vì nếu không bạn sẽ phải jsonb
cột, nhưng giá trị mặc định sẽ vẫn là '{}'::json
.
Nguồn
2016-04-07 06:54:02
Có bất kỳ điểm chuẩn nào về tốc độ này không? Lý tưởng nhất là làm thế nào mà quy mô với số lượng hồ sơ. – gregoltsov
Đã hỏi câu hỏi này là [câu hỏi riêng] (https://stackoverflow.com/questions/34042429/roughly-how-fast-is-json-jsonb-column-conversion-in-postgres-9-4). – gregoltsov
Trong bảng điều khiển Rails: 'ActiveRecord :: Base.connection.execute ('ALTER TABLE table_with_json ALTER COLUMN my_json SET DATA TYPE jsonb SỬ DỤNG my_json :: jsonb')' – Bengala