pg_table_size('index_name')
per indice individuale - ma ti mostrerà solo la dimensione del disco, non la quantità di dati
count(*)
per ottenere l'esatto monte di righe corrente
sum(pg_column_size(column_name)) from table_name
per le stime sulla quantità di dati della colonna
puoi metterti alla prova come:
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)
e per verificare come psql ottiene la dimensione dell'indice individuale, eseguilo con psql -E
..
e ancora una volta - le funzioni sopra funzionano con le dimensioni del disco - potrebbe/(potrebbe non essere) estremamente diverso dalla quantità reale di dati. l'aspirazione aiuta qui
aggiornamento Non so dove ottieni direttamente il numero di "righe" nell'indice, quindi puoi offrire solo un modo indiretto. Ad esempio, fammi avere un indice parziale, quindi "numero di righe" è diverso dalla tabella. Posso controllare le stime con EXPLAIN (ovviamente devi ripetere la clausola where per quello) controllando il rows=66800
in Index Only Scan using
mi dà un'idea sul numero di righe in quell'indice (in realtà è rows=64910
che puoi ottenere da explain analyze
o semplicemente eseguendo count(*)
). Non riesco a trovare informazioni rilevanti in pg_stats - forse c'è qualche formula. Non lo so.