Postgres: ¿comprobar el espacio en disco ocupado por la vista materializada?

14

Sé cómo verificar el tamaño de los índices y las tablas en Postgres (estoy usando la versión 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;

Pero esto no muestra vistas materializadas. ¿Cómo puedo verificar cuánto espacio en disco están ocupando?

Ricardo
fuente

Respuestas:

23

Esto es suponiendo que las vistas materializadas haber relpages >= 8en pg_class, que no tiene por qué ser el caso. En realidad puede estar vacío, aún no se ha completado, indicado por pg_class.relispopulated = FALSE. El archivo de disco correspondiente tiene un tamaño cero en este caso.

Intenta en su lugar:

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;

Donde los tipos disponibles son :

r= tabla ordinaria,
i= índice,
S= secuencia,
v= vista,
m= vista materializada,
c= tipo compuesto,
t= tabla TOAST,
f= tabla extranjera

Utilice una de las funciones de tamaño de objeto de la base de datos en lugar de crear la suya propia. Tenga en cuenta que el "tamaño de una tabla" se puede definir de diferentes maneras. Detalles:

Erwin Brandstetter
fuente
1
Respuesta correcta de hecho. Tenga en cuenta que el fin por tamaño es engañoso ya que está imprimiendo tamaño en forma haciendo pedidos legible tipo lexicográfico
Jack
@ Jack: Buen punto. Agregué una más sensata ORDER BY.
Erwin Brandstetter