2017-02-01 409 views
4

pg_table_size(),pg_relation_size() & pg_total_relation_size()有什麼區別?pg_table_size,pg_relation_size和pg_total_relation_size有什麼區別? (PostgreSQL)

我瞭解in the documentation解釋的基本差異,但它暗示我的表實際使用多少空間?

+0

什麼是不清楚關於例如「*並返回用於該表的所有磁盤空間,包括所有相關索引*」? –

+1

http://stackoverflow.com/questions/2596624/how-do-you-find-the-disk-size-of-a-postgres-postgresql-table-and-its-indexes/2596678#2596678 –

+0

@a_horse_with_no_name I主要困惑的是「返回該關係的一個分支的磁盤大小(以字節爲單位)。」在這種情況下,什麼是關係和分叉? (我是PostgreSQL的新手)它還列出了一些叉子的例子:「主數據分叉」,「可用空間圖」,「可見性圖」和「初始化叉」。那些是什麼?哪一個與我的表使用的實際磁盤空間有關? –

回答

8

對於隨機表:

# select pg_relation_size(20306, 'main') as main, 
    pg_relation_size(20306, 'fsm') as fsm, 
    pg_relation_size(20306, 'vm') as vm, 
    pg_relation_size(20306, 'init') as init, 
    pg_table_size(20306), pg_indexes_size(20306) as indexes, 
    pg_total_relation_size(20306) as total; 
    main | fsm | vm | init | pg_table_size | indexes | total 
--------+-------+------+------+---------------+---------+-------- 
253952 | 24576 | 8192 | 0 |  286720 | 196608 | 483328 
(1 row) 

從這一點,你可以告訴pg_table_sizepg_relation_size的所有返回值的總和。 pg_total_relation_sizepg_table_sizepg_indexes_size的總和。

如果您想知道您的表格使用了多少空間,請使用pg_table_sizepg_total_relation_size來思考它們 - 一個數字僅用於表格,一個數字是表格+索引。

檢查storage file layout有關哪些fsmvminit意味着一些信息,以及他們是如何存儲在磁盤上。

+0

謝謝@ jmelesky,這是一個完美的答案! <3 –