pg_table_size('index_name')
dla indywidualnego indeksu - ale pokaże tylko rozmiar dysku, a nie ilość danych
count(*)
aby uzyskać dokładną aktualną liczbę rzędów
sum(pg_column_size(column_name)) from table_name
do szacowania ilości danych w kolumnie
możesz spróbować czegoś takiego:
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)
i aby sprawdzić, jak psql pobiera indywidualny rozmiar indeksu, uruchom go za pomocą psql -E
..
i jeszcze raz - funkcje powyżej działają z rozmiarem jaki zajmuje dysk - może/(może nie) ekstremalnie różnić się od rzeczywistej ilości danych. tutaj pomaga odkurzanie
aktualizacja Nie wiem, skąd bezpośrednio otrzymujesz liczbę "wierszy" w indeksie, dlatego mogę zaoferować tylko pośredni sposób. Np. pozwól mi mieć indeks częściowy, więc "liczba wierszy" różni się od tabeli. Mogę sprawdzić szacunki za pomocą EXPLAIN (oczywiście musisz powtórzyć w tym celu klauzulę where) sprawdzając rows=66800
w Index Only Scan using
daje mi wyobrażenie o liczbie wierszy w tym indeksie (w rzeczywistości jest to rows=64910
które możesz uzyskać przez explain analyze
lub po prostu uruchom count(*)
). Nie mogę znaleźć odpowiednich informacji w pg_stats - może jest jakaś formuła. Nie wiem.