Postgres: vérifier l'espace disque occupé par la vue matérialisée?


14

Je sais comment vérifier la taille des index et des tables dans Postgres (j'utilise la version 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;

Mais cela ne montre pas de vues matérialisées. Comment puis-je vérifier combien d'espace disque ils occupent?

Réponses:


23

Cela suppose que les vues matérialisées ont relpages >= 8en pg_class, qui ne doit pas être le cas. Il peut en fait être vide - pas encore rempli, indiqué par pg_class.relispopulated = FALSE. Dans ce cas, le fichier disque correspondant a une taille nulle .

Essayez plutôt:

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;

Où les types disponibles sont :

r= table ordinaire,
i= index,
S= séquence,
v= vue,
m= vue matérialisée,
c= type composite,
t= table TOAST,
f= table étrangère

Utilisez l'une des fonctions de taille d'objet de base de données plutôt que de créer la vôtre. Sachez que la "taille d'une table" peut être définie de différentes manières. Détails:


1
Bonne réponse en effet. Notez que l'ordre par taille est trompeur car vous imprimez la taille sous une forme lisible par l'homme, ce qui rend le tri trié lexicographiquement
Jack

@Jack: Bon point. J'ai ajouté un plus sensible ORDER BY.
Erwin Brandstetter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.