2016-04-13 3 views
0

ポストグルを使用する...まず、「トーストテーブルサイズ」はテーブルに割り当てられたサイズですか? 'table size'はテーブル内のデータの実際のサイズです。実際のテーブルサイズを取得するには

新しいテーブルを作成しました。データはまだありません。テーブルのサイズは0バイトですが、トーストテーブルのサイズは8192バイトです。

私の質問のビーイング:

SELECT pg_size_pretty(pg_table_size('zlimitreacjed_1')); 

は、「8192バイト」テーブルのトーストのサイズを返し、テーブル内のデータの実際のサイズを返すためのクエリは何ですか?

+0

第1ページのデフォルトである「8K」。 okです。 – lad2025

+0

何ですか?私はなぜpg_table_sizeは実際のテーブルサイズ0ではなく、トーストテーブルのサイズを返すのですか? – John

答えて

1

PostgresのTOASTデータは、メインテーブルファイルの外部に格納された値に関連しています。これは、通常、かなり大きいためです。 「表中のデータの実際のサイズ」に関しては、が表内のデータであるため、TOAST番号を含める必要があります。

pg_table_sizeは、テーブルのディスク上のサイズを報告します。これは、表のライブデータのサイズとはまったく異なります。行の

  • 古いバージョンでは、実際のデータの代わりにトーストファイルに格納されている使用アップデート
  • ポインタ(後に残され、削除された行から

    • スペース:含むこの理由の数がありますが、メインファイル)
    • 自由空間マップ
    • ページヘッダ情報
    • 行ヘッダ情報
    ファイルのフォーマットの詳細については

    あなたは実際のデータがどのようにビッグに興味があるならhttp://www.postgresql.org/docs/current/static/storage.html

    をチェックアウト、あなたは本当に、各レコードを選択して、一緒にすべての非ヌルの長さを追加する必要があるだろうそれらの行のフィールド。

    VACUUM FULLを実行すると、(削除された行などに関連する)非データ領域の一部が消去されますが、ストレージオーバーヘッドはそこに残ります。

  • +0

    ヒープだけのサイズが必要な場合は、pg_relation_size()を使用します。 –

    +0

    @ Jim Nasbyトーストに格納されているデータとヒープの空き領域を処理する必要があります – Gary

    関連する問題