sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan finder du rækkeantallet for alle dine borde i Postgres

Der er tre måder at få denne form for optælling, hver med deres egne afvejninger.

Hvis du vil have en sand optælling, skal du udføre SELECT-sætningen som den, du brugte mod hver tabel. Dette skyldes, at PostgreSQL gemmer oplysninger om rækkesynlighed i selve rækken, ikke andre steder, så enhver nøjagtig optælling kan kun være i forhold til en transaktion. Du får en optælling af, hvad den pågældende transaktion ser på det tidspunkt, hvor den udføres. Du kan automatisere dette til at køre mod hver tabel i databasen, men du har sandsynligvis ikke brug for det niveau af nøjagtighed eller ønsker at vente så længe.

Den anden tilgang bemærker, at statistikindsamleren groft sporer, hvor mange rækker der er "live" (ikke slettet eller forældet af senere opdateringer) til enhver tid. Denne værdi kan falde lidt under hård aktivitet, men er generelt et godt skøn:

SELECT schemaname,relname,n_live_tup 
  FROM pg_stat_user_tables 
  ORDER BY n_live_tup DESC;

Det kan også vise dig, hvor mange rækker der er døde, hvilket i sig selv er et interessant tal at overvåge.

Den tredje måde er at bemærke, at systemets ANALYSE-kommando, som udføres af autovakuumprocessen regelmæssigt fra PostgreSQL 8.3 for at opdatere tabelstatistik, også beregner et rækkeestimat. Du kan få fat i den sådan her:

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;

Hvilken af ​​disse forespørgsler er bedre at bruge, er svært at sige. Normalt tager jeg den beslutning baseret på, om der er mere nyttig information, jeg også vil bruge inde i pg_class eller inde i pg_stat_user_tables. Til grundlæggende tælleformål, bare for at se, hvor store ting generelt er, bør begge være nøjagtige nok.



  1. Valg af COUNT(*) med DISTINCT

  2. PostgreSQL:Fjern attribut fra JSON-kolonnen

  3. Lær, hvordan du håndterer undtagelser i PL/SQL

  4. Kassér millisekunddelen fra tidsstemplet