Вы не переполнены, pg_size_pretty
переполнен.Функция pg_size_pretty
должна принимать bigint
:
pg_size_pretty(bigint)
text
Преобразует размер в байтах в человеческий размер.читаемый формат с единицами измерения размера
И 9223372000000000000 < 9223372036854775808
, поэтому 9223372000000000000
является вполне допустимым bigint
, и pg_size_pretty
должен делать правильные вещи с ним.Вы должны сообщить об ошибке сотрудникам PostgreSQL и выиграть похвалы.
ОБНОВЛЕНИЕ : Изучение исходного кода PostgreSQL (спасибо Джереми Пешке за предоставление ссылки) показывает нам, где ошибка:
491 else
492 {
493 mult *= 1024;
494 snprintf(buf, sizeof(buf), INT64_FORMAT " TB",
495 (size + mult / 2) / mult); /* OVERFLOW! */
496 }
Если size
близко к пределу int64
, то добавление mult/2
к нему переполнится, прежде чем следующее деление на mult
сможет вернуть его в диапазон.