We don't always want an exactly accurate count of rows, especially on a large table, since that may take a long time to execute. Administrators often need to estimate how big a table is so that they can estimate how long other operations may take.
We can get a quick estimate of the number of rows in a table by using roughly the same calculation that the Postgres optimizer uses:
SELECT (CASE WHEN reltuples > 0 THEN pg_relation_size('mytable')/(8192*relpages/reltuples) ELSE 0 END)::bigint AS estimated_row_count FROM pg_class WHERE oid = 'mytable'::regclass;
estimated_count ───────────────── 293 (1 row)
which returns a row count very quickly, no matter how large the table ...