Pour une estimation très rapide :
SELECT reltuples FROM pg_class WHERE relname = 'my_table';
Il y a cependant plusieurs mises en garde. D'une part, relname
n'est pas nécessairement unique dans pg_class
. Il peut y avoir plusieurs tables avec le même relname
dans plusieurs schémas de la base de données. Pour être sans ambiguïté :
SELECT reltuples::bigint FROM pg_class WHERE oid = 'my_schema.my_table'::regclass;
Si vous ne qualifiez pas de schéma le nom de la table, un cast en regclass
observe le search_path
actuel pour choisir le meilleur match. Et si la table n'existe pas (ou ne peut être vue) dans aucun des schémas du search_path
vous obtenez un message d'erreur. Voir Types d'identifiant d'objet dans le manuel.
Le cast en bigint
formate le real
chiffre bien, surtout pour les gros comptes.
Aussi, reltuples
peut être plus ou moins obsolète. Il existe des moyens de compenser cela dans une certaine mesure. Voir cette réponse ultérieure avec des options nouvelles et améliorées :
- Moyen rapide de découvrir le nombre de lignes d'une table dans PostgreSQL
Et une requête sur pg_stat_user_tables
est plusieurs fois plus lent (bien que toujours beaucoup plus rapide que le comptage complet), car il s'agit d'une vue sur quelques tables.