Суть проблемы в другом месте. PostgreSQL использует длинное деление для целых и больших чисел (когда в обеих частях деления используются значения типа int, bigint). Таким образом, результат pools.available_capacity_in_kb/1024/1024/1024*100)/100
это bigint. Вероятно, это не то, что вы ожидаете.
postgres=# \df round
List of functions
+------------+-------+------------------+---------------------+------+
| Schema | Name | Result data type | Argument data types | Type |
+------------+-------+------------------+---------------------+------+
| pg_catalog | round | double precision | double precision | func |
| pg_catalog | round | numeric | numeric | func |
| pg_catalog | round | numeric | numeric, integer | func |
+------------+-------+------------------+---------------------+------+
(3 rows)
Для bigint
нет никакой функции round
(потому что это не имеет никакого смысла). Пожалуйста, попробуйте исправить это с помощью деления с плавающей точкой, например
pools.available_capacity_in_kb/1024/1024/1024*100)/100.0
Теперь результат будет numeric
, а функция round(numeric, int)
существует - поэтому она должна работать.