Postgres: controlla lo spazio su disco occupato dalla vista materializzata?


14

So come controllare la dimensione degli indici e delle tabelle in Postgres (sto usando la versione 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;

Ma questo non mostra viste materializzate. Come posso verificare la quantità di spazio su disco che occupano?

Risposte:


23

Ciò presuppone che materializzata viste sono relpages >= 8in pg_class, che non deve essere il caso. In realtà può essere vuoto - non ancora popolato, indicato da pg_class.relispopulated = FALSE. Il file del disco corrispondente ha una dimensione zero in questo caso.

Prova invece:

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;

Dove sono i tipi disponibili :

r= tabella ordinaria,
i= indice,
S= sequenza,
v= vista,
m= vista materializzata,
c= tipo composito,
t= tabella TOAST,
f= tabella esterna

Utilizzare una delle funzioni della dimensione dell'oggetto del database anziché crearne una propria. Tenere presente che la "dimensione di una tabella" può essere definita in diversi modi. Dettagli:


1
Risposta corretta davvero. Nota che l'ordine per dimensione è fuorviante mentre stai stampando le dimensioni in una forma leggibile dall'uomo rendendo ordinamento lessicograficamente ordinabile
Jack

@ Jack: buon punto. Ho aggiunto un più sensato ORDER BY.
Erwin Brandstetter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.