Postgres: periksa ruang disk yang diambil oleh tampilan terwujud?

14

Saya tahu cara memeriksa ukuran indeks dan tabel di Postgres (Saya menggunakan versi 9.4):

SELECT
   relname AS objectname,
   relkind AS objecttype,
   reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
   FROM pg_class
   WHERE relpages >= 8
   ORDER BY relpages DESC;

Tapi ini tidak menunjukkan pandangan terwujud. Bagaimana saya bisa memeriksa berapa banyak ruang disk yang digunakan?

Richard
sumber

Jawaban:

23

Ini adalah asumsi bahwa pandangan terwujud telah relpages >= 8di pg_class, yang tidak harus terjadi. Ini sebenarnya bisa kosong - belum diisi, ditunjukkan oleh pg_class.relispopulated = FALSE. File disk yang sesuai memiliki ukuran nol dalam hal ini.

Coba saja:

SELECT relname   AS objectname
     , relkind   AS objecttype
     , reltuples AS entries
     , pg_size_pretty(pg_table_size(oid)) AS size  -- depending - see below
FROM   pg_class
WHERE  relkind IN ('r', 'i', 'm')
ORDER  BY pg_table_size(oid) DESC;

Di mana jenis yang tersedia adalah :

r= tabel biasa,
i= indeks,
S= urutan,
v= tampilan,
m= tampilan terwujud,
c= tipe komposit,
t= tabel TOAST,
f= tabel asing

Gunakan salah satu fungsi ukuran objek database daripada membangun Anda sendiri. Sadarilah bahwa "ukuran tabel" dapat didefinisikan dengan berbagai cara. Detail:

Erwin Brandstetter
sumber
1
Memang jawaban yang benar. Perhatikan bahwa pesanan berdasarkan ukuran menyesatkan karena Anda mencetak ukuran dalam bentuk yang dapat dibaca manusia membuat pemesanan menjadi agak leksikografis
Jack
@ Jack: Poin bagus. Saya menambahkan yang lebih masuk akal ORDER BY.
Erwin Brandstetter