pg_table_size('index_name')
para el índice individual, pero solo le mostrará el tamaño en el disco, no la cantidad de datos
count(*)
para obtener la cantidad exacta de filas actual
sum(pg_column_size(column_name)) from table_name
para estimaciones sobre la cantidad de datos de la columna
puedes probar algo como:
t=# \di+ tbl*
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+----------------------+-------+----------+----------------+--------+-------------
public | tbl_pkey | index | postgres | tbl | 156 MB |
public | tbl_unpic | index | postgres | tbl | 46 MB |
public | tbl_x1 | index | postgres | tbl | 57 MB |
(3 rows)
t=# \dt+ tbl
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------------+-------+----------+-------+-------------
public | tbl | table | postgres | 78 MB |
(1 row)
t=# select pg_size_pretty(pg_total_relation_size('tbl'));
pg_size_pretty
----------------
337 MB
(1 row)
t=# select 78+57+46+156;
?column?
----------
337
(1 row)
y para verificar cómo psql obtiene el tamaño del índice individual, ejecútelo con psql -E
..
y una vez más, las funciones anteriores funcionan con el tamaño que ocupa el disco, puede/(puede no) ser extremadamente diferente de la cantidad real de datos. pasar la aspiradora ayuda aquí
actualizar No sé de dónde obtiene directamente el número de "filas" en el índice, por lo tanto, solo puedo ofrecer una forma indirecta. Por ejemplo, permítanme tener un índice parcial, por lo que el "número de filas" es diferente de la tabla. Puedo verificar las estimaciones con EXPLAIN (por supuesto, debe repetir la cláusula where para eso) verificando rows=66800
en Index Only Scan using
me da una idea del número de filas en ese índice (en realidad es rows=64910
que puede obtener explain analyze
o simplemente ejecutando count(*)
). No puedo encontrar información relevante en pg_stats; tal vez haya alguna fórmula. No lo sé.