В live DB в postgresql 9.3 У меня есть столбец JSON.
Я хочу перенести его в JSONB.
Предполагая, что я перенесли БД сначала до 9.4 (используя pg_upgrade). Что мне делать дальше?
Ответ 1
ALTER TABLE table_with_json
ALTER COLUMN my_json
SET DATA TYPE jsonb
USING my_json::jsonb;
Ответ 2
В контексте 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.