इस प्रकार की गिनती प्राप्त करने के तीन तरीके हैं, प्रत्येक का अपना ट्रेडऑफ़ है।
यदि आप एक वास्तविक गणना चाहते हैं, तो आपको प्रत्येक तालिका के विरुद्ध उपयोग किए जाने वाले चयन कथन को निष्पादित करना होगा। ऐसा इसलिए है क्योंकि PostgreSQL पंक्ति दृश्यता जानकारी को पंक्ति में ही रखता है, कहीं और नहीं, इसलिए कोई भी सटीक गणना केवल कुछ लेनदेन के सापेक्ष हो सकती है। आप उस लेन-देन की गिनती प्राप्त कर रहे हैं जब वह उस समय निष्पादित होता है जब वह निष्पादित होता है। आप इसे डेटाबेस में प्रत्येक तालिका के विरुद्ध चलाने के लिए स्वचालित कर सकते हैं, लेकिन आपको शायद उस स्तर की सटीकता की आवश्यकता नहीं है या आप इतना लंबा इंतजार करना चाहते हैं।
दूसरा दृष्टिकोण नोट करता है कि सांख्यिकी संग्राहक किसी भी समय मोटे तौर पर कितनी पंक्तियों को "लाइव" (हटाए गए या बाद के अपडेट द्वारा अप्रचलित नहीं) ट्रैक करता है। भारी गतिविधि के तहत यह मान थोड़ा कम हो सकता है, लेकिन आम तौर पर यह एक अच्छा अनुमान है:
SELECT schemaname,relname,n_live_tup
FROM pg_stat_user_tables
ORDER BY n_live_tup DESC;
यह आपको यह भी दिखा सकता है कि कितनी पंक्तियाँ मृत हैं, जो अपने आप में निगरानी के लिए एक दिलचस्प संख्या है।
तीसरा तरीका यह नोट करना है कि सिस्टम ANALYZE कमांड, जिसे ऑटोवैक्यूम प्रक्रिया द्वारा नियमित रूप से PostgreSQL 8.3 के रूप में तालिका आँकड़ों को अद्यतन करने के लिए निष्पादित किया जाता है, एक पंक्ति अनुमान की गणना भी करता है। आप उसे इस तरह पकड़ सकते हैं:
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;
इनमें से कौन सा प्रश्न उपयोग करना बेहतर है, यह कहना मुश्किल है। आम तौर पर मैं यह निर्णय इस आधार पर लेता हूं कि क्या और अधिक उपयोगी जानकारी है जिसे मैं pg_class के अंदर या pg_stat_user_tables के अंदर उपयोग करना चाहता हूं। गिनती के बुनियादी उद्देश्यों के लिए केवल यह देखने के लिए कि सामान्य रूप से कितनी बड़ी चीजें हैं, या तो पर्याप्त सटीक होना चाहिए।