Ada tiga cara untuk mendapatkan jumlah seperti ini, masing-masing dengan pengorbanannya sendiri.
Jika Anda menginginkan penghitungan yang benar, Anda harus menjalankan pernyataan SELECT seperti yang Anda gunakan untuk setiap tabel. Ini karena PostgreSQL menyimpan informasi visibilitas baris di baris itu sendiri, bukan di tempat lain, jadi penghitungan akurat apa pun hanya bisa relatif terhadap beberapa transaksi. Anda mendapatkan hitungan dari apa yang dilihat transaksi itu pada saat dijalankan. Anda dapat mengotomatiskan ini untuk dijalankan pada setiap tabel dalam database, tetapi Anda mungkin tidak memerlukan tingkat akurasi tersebut atau ingin menunggu selama itu.
Pendekatan kedua mencatat bahwa pengumpul statistik melacak secara kasar berapa banyak baris yang "langsung" (tidak dihapus atau usang oleh pembaruan selanjutnya) kapan saja. Nilai ini dapat turun sedikit dalam aktivitas berat, tetapi umumnya merupakan perkiraan yang baik:
SELECT schemaname,relname,n_live_tup
FROM pg_stat_user_tables
ORDER BY n_live_tup DESC;
Itu juga dapat menunjukkan kepada Anda berapa banyak baris yang mati, yang merupakan angka yang menarik untuk dipantau.
Cara ketiga adalah dengan mencatat bahwa perintah sistem ANALYZE, yang dijalankan oleh proses autovacuum secara teratur pada PostgreSQL 8.3 untuk memperbarui statistik tabel, juga menghitung perkiraan baris. Anda dapat mengambil yang seperti ini:
SELECT
nspname AS schemaname,relname,reltuples
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE
nspname NOT IN ('pg_catalog', 'information_schema') AND
relkind='r'
ORDER BY reltuples DESC;
Manakah dari kueri ini yang lebih baik untuk digunakan sulit dikatakan. Biasanya saya membuat keputusan itu berdasarkan apakah ada informasi yang lebih berguna yang juga ingin saya gunakan di dalam pg_class atau di dalam pg_stat_user_tables. Untuk tujuan penghitungan dasar hanya untuk melihat seberapa besar hal-hal secara umum, keduanya harus cukup akurat.