La siguiente consulta SQL de Postgres mostrará una lista de todas las tablas de todos los esquemas y sus tamaños y tamaños de índice. Si una tabla es solo una tabla de índice, aparecerá como índice 100%.¿Simplifica una consulta SQL de Postgres para listar tabla y tamaños de índice?
SELECT schema,
name,
pg_size_pretty(CASE WHEN is_index THEN 0 ELSE s END) AS size,
pg_size_pretty(CASE WHEN is_index THEN s ELSE st - s END) AS index,
CASE WHEN st = 0 THEN 0
WHEN is_index THEN 100
ELSE 100 - ((s*100)/st) END || '%' as ratio,
pg_size_pretty(st) as total
FROM (SELECT *,
st = s AS is_index
FROM (SELECT nspname as schema,
relname as name,
pg_relation_size(nspname || '.' || relname) as s,
pg_total_relation_size(nspname || '.' || relname) as st
FROM pg_class
JOIN pg_namespace ON (relnamespace = pg_namespace.oid)) AS p)
AS pp
ORDER BY st DESC LIMIT 30;
que dará a los siguientes resultados:
schema | name | size | index | ratio | total
----------------+------------------------+---------+---------+-------+---------
public | conf | 4072 kB | 4360 kB | 52% | 8432 kB
archive | product_param | 4048 kB | 3968 kB | 50% | 8016 kB
public | conf_pkey | 0 bytes | 4320 kB | 100% | 4320 kB
archive | product_value | 1568 kB | 1136 kB | 43% | 2704 kB
public | param_mapping | 1472 kB | 832 kB | 37% | 2304 kB
archive | supplie_price | 944 kB | 896 kB | 49% | 1840 kB
public | product_param_param_id | 0 bytes | 1552 kB | 100% | 1552 kB
archive | product_param_id | 0 bytes | 1536 kB | 100% | 1536 kB
que he llegado a un punto donde no puedo ver el bosque por los árboles, y está empezando a ser un poco difícil de manejar.
Me pregunto si hay algo que pueda simplificarse o hacerse redundante. Las columnas no deben permanecer necesariamente iguales si la consulta puede hacerse mucho más simple.
Vea también http://stackoverflow.com/questions/2596624/how-do-you-find-the-disk-size-of-a-postgres-postgresql- table-and-its-indexes. – Vadzim