Viji
@Viji
Associate DevOps Engineer

Существуют ли миграции баз данных, связанные с изменением полей json(b) обьекта?

есть база данных, которая в столбце хранит json данные - тип jsonb. Данные клиента, такие как телефон, имя компании, адреса. Понадобилось изменить структуру этого json - добавить возможность вносить несколько адресов и телефонов - теперь они будут хранится как массивы под phones: и addresses соответственно. До этого просто как поля... address: xxx, phone: zzz.

Можно ли с помощью sql провести такую миграцию, чтобы поменять структуру этого json и не потерять данные? Может надо сначала jsonb перевести просто в соседнюю колонку (новую) с типом json?
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka
Токсичный шарпист
Да, можно. Будет что-то типа:
Этот запрос добавит поле "phones" в те строки, где его ещё нет, но при этом есть поле "phone". Значением будет массив из единственного значения, которое хранится в поле "phone"
UPDATE data_table
SET 
  jsonb_column = jsonb_set(jsonb_column, '{phones}', jsonb_build_array(jsonb_column->'phone'))
WHERE
  (NOT (jsonb_column ? 'phones')) AND (jsonb_column ? 'phone')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы