Я пробую следующий запрос:
SELECT (json_data->'position'->'lat') + 1.0 AS lat FROM updates LIMIT 5;
(+1.0 именно там, чтобы принудительно преобразовать в float. Мои актуальные запросы намного сложнее, этот запрос является всего лишь тестовым случаем для проблемы.)
Я получаю сообщение об ошибке:
ERROR: operator does not exist: jsonb + numeric
Если я добавляю в явное литье:
SELECT (json_data->'position'->'lat')::float + 1.0 AS lat FROM updates LIMIT 5;
ошибка становится:
ERROR: operator does not exist: jsonb + double precesion
Я понимаю, что большинство значений jsonb нельзя вставлять в float, но в этом случае я знаю, что lats - все JSON-номера.
Есть ли функция, которая переводит значения jsonb в float (или возвращает NULL для uncastable)?