Подтвердить что ты не робот

Postgresql переводит JSON в JSONB

В postgresql 9.4 был включен новый JSONB.

В live DB в postgresql 9.3 У меня есть столбец JSON.

Я хочу перенести его в JSONB.

Предполагая, что я перенесли БД сначала до 9.4 (используя pg_upgrade). Что мне делать дальше?

4b9b3361

Ответ 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.