Postgres: Überprüfen Sie den Speicherplatz, der von der materialisierten Ansicht belegt wird?

14

Ich kann die Größe von Indizes und Tabellen in Postgres überprüfen (ich verwende 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;

Dies zeigt jedoch keine materialisierten Ansichten. Wie kann ich überprüfen, wie viel Speicherplatz sie belegen?

Richard
quelle

Antworten:

22

Das setzt voraus , dass materialisierte Ansichten haben relpages >= 8in pg_class, was nicht der Fall sein muss. Es kann tatsächlich leer sein - noch nicht belegt, angezeigt durch pg_class.relispopulated = FALSE. Die entsprechende Plattendatei hat in diesem Fall eine Größe von Null .

Versuchen Sie stattdessen:

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;

Wo die verfügbaren Typen sind :

r= gewöhnliche Tabelle,
i= Index,
S= Sequenz,
v= Ansicht,
m= materialisierte Ansicht,
c= zusammengesetzter Typ,
t= TOAST-Tabelle,
f= fremde Tabelle

Verwenden Sie eine der Funktionen für die Datenbankobjektgröße, anstatt Ihre eigene zu erstellen. Beachten Sie, dass die "Größe einer Tabelle" auf verschiedene Arten definiert werden kann. Einzelheiten:

Erwin Brandstetter
quelle
1
Richtige Antwort in der Tat. Beachten Sie, dass die Reihenfolge nach Größe irreführend ist, da Sie die Größe in lesbarer Form drucken und die Sortierung lexikografisch vornehmen
Jack,
@ Jack: Guter Punkt. Ich fügte eine vernünftigere hinzu ORDER BY.
Erwin Brandstetter