pg_table_size('index_name')
for individuelt indeks - men det vil kun vise dig størrelsen på disken, ikke mængden af data
count(*)
for at få den nøjagtige aktuelle montering af rækker
sum(pg_column_size(column_name)) from table_name
for estimeringer af kolonnedatamængde
du kan prøve dig selv 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)
og for at kontrollere, hvordan psql får den individuelle indeksstørrelse, skal du køre den med psql -E
..
og endnu en gang - ovenstående funktioner fungerer med størrelsen på disken - det kan/(måske ikke) være ekstremt forskelligt fra den reelle mængde data. støvsugning hjælper her
opdatering Jeg ved ikke, hvor du direkte får antallet af "rækker" i indeks, kan derfor kun tilbyde indirekte måde. Lad mig f.eks. have delvist indeks, så "antal rækker" er forskellig fra tabel. Jeg kan tjekke estimater med EXPLAIN (selvfølgelig skal du gentage hvor-klausulen for det) ved at tjekke rows=66800
i Index Only Scan using
giver mig en idé om antallet af rækker i det indeks (faktisk er det rows=64910
som du kan få ved at explain analyze
eller bare køre count(*)
). Jeg kan ikke finde relevant info i pg_stats - måske er der en formel. Jeg ved det ikke.