Как перенести атрибут модели ActiveRecord из json в jsonb? - PullRequest
0 голосов
/ 25 апреля 2018

Как должна выглядеть миграция? Я хотел бы воспользоваться техникой запросов к массиву jsonb.

1 Ответ

0 голосов
/ 26 апреля 2018

Я бы написал миграцию следующим образом:

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.

...