あなたは溢れているのではなく、pg_size_pretty
溢れています。pg_size_pretty
関数は次の値をとるはずbigint
です:
pg_size_pretty(bigint)
text
バイト単位のサイズを、サイズ単位を持つ人間が読める形式に変換します
そして、完全に有効であり、9223372000000000000 < 9223372036854775808
それで正しいことを行う必要があります. バグを PostgreSQL の担当者に報告して、賞賛を得る必要があります。9223372000000000000
bigint
pg_size_pretty
更新: PostgreSQL のソース コードを調べると (リンクを提供してくれた Jeremiah Peschka に感謝します)、バグの場所がわかりました。
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
範囲内に戻すことができます。