У меня есть таблица 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, которые я хочу обновить в производственной среде, это занимает довольно много времени, и мне кажется, что существует большая избыточность взапрос.
Я думаю, что следующим шагом было бы обернуть все это в транзакцию и улучшить запрос, есть ли что-нибудь, что можно сделать для повышения производительности этого запроса?