För en mycket snabb uppskattning:
SELECT reltuples FROM pg_class WHERE relname = 'my_table';
Det finns dock flera varningar. För en, relname
är inte nödvändigtvis unikt i pg_class
. Det kan finnas flera tabeller med samma relname
i flera scheman i databasen. För att vara entydig:
SELECT reltuples::bigint FROM pg_class WHERE oid = 'my_schema.my_table'::regclass;
Om du inte schemakvalificerar tabellnamnet, en cast till regclass
observerar den aktuella search_path
att välja den bästa matchningen. Och om tabellen inte finns (eller inte kan ses) i något av schemana i search_path
du får ett felmeddelande. Se Objektidentifieringstyper i manualen.
Casten till bigint
formaterar den real
siffra bra, särskilt för stora räkningar.
Även reltuples
kan vara mer eller mindre inaktuell. Det finns sätt att kompensera för detta till viss del. Se detta senare svar med nya och förbättrade alternativ:
- Snabbt sätt att upptäcka radantalet i en tabell i PostgreSQL
Och en fråga på pg_stat_user_tables
är många gånger långsammare (men fortfarande mycket snabbare än fullt antal), eftersom det är en vy på ett par bord.