script para obtener el tamaño de cada tabla e indice en Postgresql
Poder determinar como está compuesto el tamaño de una base de datos es una tarea fundamental en el rol de un DBA. Esto te permite identificar posibles errores de diseño o segmentaciones futuras necesarias.
Acontinuación te dejo un script que suele serme útíl cuando trabajo en motores PostgreSQL. En esta caso si bien lo he usado en su versión 16, también aplica para 17 y 18.
SELECT
n.nspname AS schema_name,
c.relname AS table_name,
CASE
WHEN c.relkind = 'r' THEN 'Tabla'
WHEN c.relkind = 'i' THEN 'Índice'
WHEN c.relkind = 'm' THEN 'Vista Materializada'
ELSE c.relkind::text
END AS object_type,
-- Tamaño total (datos + índices) en Megabytes (MB)
ROUND((pg_total_relation_size(c.oid) / (1024.0 * 1024.0))::numeric, 2) AS total_size_mb,
-- Tamaño de la porción de datos o del índice en Megabytes (MB)
ROUND((pg_relation_size(c.oid) / (1024.0 * 1024.0))::numeric, 2) AS data_or_index_size_mb,
-- Tamaño de los índices asociados (solo para tablas) en Megabytes (MB)
CASE
WHEN c.relkind = 'r' THEN ROUND((pg_indexes_size(c.oid) / (1024.0 * 1024.0))::numeric, 2)
ELSE NULL
END AS indexes_size_mb,
c.reltuples::bigint AS row_count
FROM
pg_class c
LEFT JOIN
pg_namespace n ON n.oid = c.relnamespace
WHERE
n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
AND c.relkind IN ('r', 'i', 'm')
ORDER BY
pg_total_relation_size(c.oid) DESC;
| columna | descripción |
| schema_name | Esquema al que pertenece la tabla o índice. |
| table_name | Nombre de la tabla, índice o vista materializada. |
| object_type | Tipo de objeto (‘Tabla’, ‘Índice’, ‘Vista Materializada’). |
| total_size | Tamaño total de la relación (datos + índices + TOAST). Para índices es su tamaño. |
| table_or_index_size | Tamaño de la relación sin sus índices. Para índices, es su tamaño. |
| indexes_size | Tamaño total de los índices asociados (solo aplica y se muestra para tablas). |
| row_count | Conteo de filas de la tabla (es una estimación del catálogo). |

Con el script adjunto obtendrás una salida similar a esta:

