pg_table_size('index_name')
pour un index individuel - mais il ne vous montrera que la taille sur le disque, pas la quantité de données
count(*)
pour obtenir le montage actuel exact des lignes
sum(pg_column_size(column_name)) from table_name
pour les estimations sur la quantité de données de colonne
vous pouvez vous essayer à quelque chose comme :
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)
et pour vérifier comment psql obtient la taille de l'index individuel, exécutez-le avec psql -E
..
et encore une fois - les fonctions ci-dessus fonctionnent avec la taille qu'il faut du disque - cela peut/(peut ne pas) être extrêmement différent de la quantité réelle de données. passer l'aspirateur aide ici
mettre à jour Je ne sais pas où vous obtenez directement le nombre de "lignes" dans l'index, je ne peux donc offrir qu'une manière indirecte. Par exemple, permettez-moi d'avoir un index partiel, donc le "nombre de lignes" est différent de la table. Je peux vérifier les estimations avec EXPLAIN (bien sûr, vous devez répéter la clause where pour cela) en vérifiant les rows=66800
dans Index Only Scan using
me donne une idée du nombre de lignes dans cet index (en fait c'est rows=64910
que vous pouvez obtenir en explain analyze
ou simplement en exécutant count(*)
). Je ne trouve pas d'informations pertinentes dans pg_stats - il y a peut-être une formule. Je ne sais pas.