Per un preventivo molto veloce:
SELECT reltuples FROM pg_class WHERE relname = 'my_table';
Ci sono diversi avvertimenti, però. Per uno, relname
non è necessariamente univoco in pg_class
. Possono esserci più tabelle con lo stesso relname
in più schemi del database. Per essere inequivocabili:
SELECT reltuples::bigint FROM pg_class WHERE oid = 'my_schema.my_table'::regclass;
Se non qualifichi lo schema del nome della tabella, un cast a regclass
osserva il search_path
corrente per scegliere la migliore corrispondenza. E se la tabella non esiste (o non può essere vista) in nessuno degli schemi nel search_path
viene visualizzato un messaggio di errore. Vedi Tipi di identificatore oggetto nel manuale.
Il cast di bigint
formatta il real
numero bene, soprattutto per grandi conteggi.
Inoltre, reltuples
può essere più o meno scaduto. Ci sono modi per compensare questo in una certa misura. Vedi questa risposta successiva con opzioni nuove e migliorate:
- Un modo rapido per scoprire il conteggio delle righe di una tabella in PostgreSQL
E una query su pg_stat_user_tables
è molte volte più lento (sebbene ancora molto più veloce del conteggio completo), poiché è una vista su un paio di tabelle.