Ваша первая попытка должна go исправить вашу модель данных, как прокомментировал Гордон Линофф. Числа должны храниться в отдельной таблице, каждое значение должно быть в отдельной строке.
В Postgres вы можете разделить значения на строки, используя regexp_split_to_table()
, а затем агрегировать:
select t.id, sum(x.val::int) result
from mytable t
cross join lateral regexp_split_to_table(t.column_to_sum, ':') as x(val)
group by t.id