Pro velmi rychlý odhad:
SELECT reltuples FROM pg_class WHERE relname = 'my_table';
Existuje však několik upozornění. Za prvé relname
není nutně jedinečné v pg_class
. Může existovat více tabulek se stejným relname
ve více schématech databáze. Abychom byli jednoznační:
SELECT reltuples::bigint FROM pg_class WHERE oid = 'my_schema.my_table'::regclass;
Pokud název tabulky nekvalifikujete podle schématu, přetypování na regclass
sleduje aktuální search_path
vybrat nejlepší zápas. A pokud tabulka neexistuje (nebo ji nelze vidět) v žádném ze schémat v search_path
zobrazí se chybová zpráva. Viz Typy identifikátorů objektů v návodu.
Obsazení do bigint
formátuje real
číslo pěkně, zvláště pro velké počty.
Také reltuples
může být více či méně zastaralé. Existují způsoby, jak to do určité míry kompenzovat. Podívejte se na tuto pozdější odpověď s novými a vylepšenými možnostmi:
- Rychlý způsob, jak zjistit počet řádků v tabulce v PostgreSQL
A dotaz na pg_stat_user_tables
je mnohonásobně pomalejší (i když stále mnohem rychlejší než plný počet), protože to je pohled na několik stolů.