pg_table_size('index_name')
untuk indeks individual - tetapi itu hanya akan menunjukkan kepada Anda ukuran pada disk, bukan jumlah data
count(*)
untuk mendapatkan jumlah baris saat ini yang tepat
sum(pg_column_size(column_name)) from table_name
untuk estimasi jumlah data kolom
Anda dapat mencoba sendiri seperti:
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)
dan untuk memeriksa bagaimana psql mendapatkan ukuran indeks individual, jalankan dengan psql -E
..
dan sekali lagi - fungsi di atas bekerja dengan ukuran disk yang dibutuhkan - mungkin/(mungkin tidak) sangat berbeda dari jumlah data yang sebenarnya. menyedot debu membantu di sini
perbarui Saya tidak tahu di mana Anda langsung mendapatkan jumlah "baris" dalam indeks, sehingga hanya dapat menawarkan cara tidak langsung. Misalnya biarkan saya memiliki indeks parsial, jadi "jumlah baris" berbeda dari tabel. Saya dapat memeriksa estimasi dengan EXPLAIN (tentu saja Anda harus mengulangi klausa where untuk itu) dengan memeriksa rows=66800
di Index Only Scan using
memberi saya gambaran tentang jumlah baris dalam indeks itu (sebenarnya rows=64910
yang bisa Anda dapatkan dengan explain analyze
atau cukup jalankan count(*)
). Saya tidak dapat menemukan info yang relevan di pg_stats - mungkin ada beberapa rumus. Saya tidak tahu.