У меня есть таблица postgresql, в которой есть столбец, содержащий данные jsonb для строки. Не все данные были извлечены из jsonb для создания таблицы, но мы хотели сохранить ее на случай, если нам потребуется извлечь больше данных.
Теперь нам нужно вытащить еще одно поле из jsonb в строке и создать новый столбец для хранения значения. Примеры, которые я видел, похоже, не касаются этого конкретно, поэтому я хочу дважды проверить свой процесс и посмотреть, есть ли более простой способ сделать это в PostgreSQL.
Моя инструкция вставки выглядит следующим образом:
insert into companyTable (company_id)
select company_object ->>'CompanyId'
from companyTable
Затем следует извлечь значение из jsonb company_obejct
и вставить в столбец company_id
для каждой строки в таблице. Выглядит ли это правильно, и это более простой способ выполнить эту задачу?
UPDATE:
Учитывая утверждение @ Łukasz Kamiński, кажется, что я хочу UPDATE
не вставлять, поскольку INSERT
добавляет новую строку, и я просто хочу обновить строку, в которую был добавлен новый столбец. При этом я считаю, что это код, который я должен использовать.
update companyTable
set (company_id) =
(select company_object ->>'CompanyId'
from company.company)
Кроме того, поскольку я не полностью понимаю контекст UPDATE
, следует ли поместить его в цикл, чтобы он обновлял каждую строку с этим объектом jsonb строк?
например (до обновления):
id | col1 | company_object | company_id
---|------|--------------------------|------------
1 | a |{'b':1, 'company_id': 3} | NULL
2 | a |{'b':2, 'company_id': 4} | NULL
3 | a |{'b':3, 'company_id': 5} | NULL
(после обновления)
id | col1 | company_object | company_id
---|------|--------------------------|------------
1 | a |{'b':1, 'company_id': 3} | 3
2 | a |{'b':2, 'company_id': 4} | 4
3 | a |{'b':3, 'company_id': 5} | 5