pg_table_size('index_name')
pro individuální index – zobrazí vám však pouze velikost na disku, nikoli množství dat
count(*)
získat přesný aktuální počet řádků
sum(pg_column_size(column_name)) from table_name
pro odhady množství dat ve sloupcích
můžete si vyzkoušet něco jako:
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)
a chcete-li zkontrolovat, jak psql získává individuální velikost indexu, spusťte jej pomocí psql -E
..
a ještě jednou - výše uvedené funkce pracují s velikostí disku - ta se může/(nemusí) výrazně lišit od skutečného množství dat. zde pomáhá vysávání
aktualizovat Nevím, kde přímo získáte počet "řádků" v indexu, takže mohu nabídnout pouze nepřímou cestu. Např. dovolte mi mít částečný index, takže "počet řádků" se liší od tabulky. Mohu zkontrolovat odhady pomocí EXPLAIN (pro to musíte samozřejmě zopakovat klauzuli where) kontrolou rows=66800
v Index Only Scan using
dává mi představu o počtu řádků v tomto indexu (ve skutečnosti je to rows=64910
kterou můžete získat pomocí explain analyze
nebo stačí spustit count(*)
). Nemohu najít relevantní informace v pg_stats - možná je tam nějaký vzorec. Nevím.