pg_table_size('index_name')
para índice individual - mas mostrará apenas o tamanho no disco, não a quantidade de dados count(*)
para obter a montagem atual exata de linhas sum(pg_column_size(column_name)) from table_name
para estimativas sobre a quantidade de dados da coluna você pode tentar você mesmo assim:
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)
e para verificar como o psql obtém o tamanho do índice individual, execute-o com
psql -E
.. e mais uma vez - as funções acima trabalham com o tamanho do disco - pode/(pode não) ser extremamente diferente da quantidade real de dados. aspirar ajuda aqui
atualizar Não sei onde você obtém diretamente o número de "linhas" no índice, portanto, pode oferecer apenas uma maneira indireta. Por exemplo, deixe-me ter um índice parcial, então "número de linhas" é diferente da tabela. Posso verificar as estimativas com EXPLAIN (é claro que você precisa repetir a cláusula where para isso) verificando as
rows=66800
em Index Only Scan using
me dá uma idéia do número de linhas nesse índice (na verdade é rows=64910
que você pode obter explain analyze
ou apenas executando count(*)
). Não consigo encontrar informações relevantes em pg_stats - talvez haja alguma fórmula. Não sei.