pg_table_size('index_name')
för individuellt index - men det visar bara storleken på disken, inte mängden data
count(*)
för att få den exakta aktuella monteringen av rader
sum(pg_column_size(column_name)) from table_name
för uppskattningar av kolumndatamängd
du kan prova själv som:
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)
och för att kontrollera hur psql får den individuella indexstorleken, kör den med psql -E
..
och än en gång - funktionerna ovan fungerar med storleken den tar på disken - det kan/(kanske inte) vara extremt annorlunda från den verkliga mängden data. dammsugning hjälper här
uppdatering Jag vet inte var du direkt får antalet "rader" i index, kan därför erbjuda endast indirekt sätt. Låt mig t.ex. ha partiellt index, så "antal rader" skiljer sig från tabellen. Jag kan kontrollera uppskattningar med EXPLAIN (naturligtvis måste du upprepa where-satsen för det) genom att kontrollera rows=66800
i Index Only Scan using
ger mig en uppfattning om antalet rader i det indexet (det är faktiskt rows=64910
som du kan få genom att explain analyze
eller bara köra count(*)
). Jag kan inte hitta relevant information i pg_stats - det kanske finns någon formel. Jag vet inte.