У меня есть таблица cart
:
id | value | metadata
--------+-------+-------------------
45417 | 0 | {"value": "1300"}
45418 | 0 | {"value": "1300"}
276021 | 0 | {"value": "1300"}
и я пытаюсь ОБНОВИТЬ столбец value
значением в JSONB metadata
, если он существует. Я пришел к следующему запросу:
UPDATE cart SET value=CAST(subquery.meta_val as INTEGER) FROM
(SELECT id, metadata->>'value' as meta_val FROM cart
WHERE value = 0 AND
metadata->>'value' IS NOT NULL) as subquery
WHERE cart.id=subquery.id;
Теперь это работает, но для 4M строк, которые я хочу обновить при производстве, требуется довольно много времени, и мне кажется, что в запросе много избыточности.
Я думаю, что следующим шагом было бы обернуть все это в транзакцию и улучшить запрос. Можно ли что-нибудь сделать для повышения производительности этого запроса?