pg_table_size('index_name')
за индивидуален индекс - но ще ви покаже само размера на диска, а не количеството данни
count(*)
за да получите точното текущо монтиране на редове
sum(pg_column_size(column_name)) from table_name
за оценки на количеството данни в колоната
можете да опитате нещо като:
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)
и за да проверите как psql получава индивидуалния размер на индекса, стартирайте го с psql -E
..
и още веднъж - функциите по-горе работят с размера, който заема от диска - той може/(може да не) е изключително различен от реалното количество данни. прахосмукачката помага тук
актуализация Не знам откъде директно получавате броя на "редовете" в индекса, така че мога да предложа само индиректен начин. Например нека имам частичен индекс, така че "броят редове" е различен от таблицата. Мога да проверя оценките с EXPLAIN (разбира се, трябва да повторите клаузата where за това), проверявайки rows=66800
в Index Only Scan using
дава ми представа за броя на редовете в този индекс (всъщност е rows=64910
които можете да получите чрез explain analyze
или просто изпълнявате count(*)
). Не мога да намеря подходяща информация в pg_stats - може би има някаква формула. Не знам.