Du kan sende din JSON-streng, som den er, og få PostgreSQL til at håndtere den:
update portfolios p
set votes = s.votes
from (
select (e->>'votes')::int as votes, (e->>'id')::int as id
from (select (regexp_replace($1, '"\1"', 'g'))::jsonb as jarr) j
cross join jsonb_array_elements(jarr) e
) s
where p.id = s.id;
Hvor $1
er [{votes: 5, id: 1}, {votes: 15, id: 1}, {votes: 25, id: 2}]', '([a-z]+)
som en streng.