sql >> Database >  >> RDS >> PostgreSQL

Hoe vind je het aantal rijen voor al je tabellen in Postgres

Er zijn drie manieren om dit soort telling te krijgen, elk met hun eigen afwegingen.

Als je een echte telling wilt, moet je de SELECT-instructie uitvoeren zoals je die voor elke tabel hebt gebruikt. Dit komt omdat PostgreSQL de zichtbaarheidsinformatie van rijen in de rij zelf bewaart, niet ergens anders, dus een nauwkeurige telling kan alleen relatief zijn aan een transactie. U krijgt een telling van wat die transactie ziet op het moment dat deze wordt uitgevoerd. Je zou dit kunnen automatiseren zodat het tegen elke tabel in de database kan worden uitgevoerd, maar waarschijnlijk heb je dat niveau van nauwkeurigheid niet nodig of wil je zo lang wachten.

De tweede benadering merkt op dat de statistiekenverzamelaar ongeveer bijhoudt hoeveel rijen op enig moment "live" zijn (niet verwijderd of verouderd door latere updates). Deze waarde kan iets afwijken bij zware activiteit, maar is over het algemeen een goede schatting:

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

Dat kan je ook laten zien hoeveel rijen dood zijn, wat zelf een interessant getal is om te controleren.

De derde manier is om op te merken dat het systeem ANALYZE-commando, dat vanaf PostgreSQL 8.3 regelmatig wordt uitgevoerd door het autovacuumproces om tabelstatistieken bij te werken, ook een rijschatting berekent. Je kunt die zo pakken:

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;

Welke van deze query's het beste is om te gebruiken, is moeilijk te zeggen. Normaal gesproken neem ik die beslissing op basis van of er meer nuttige informatie is die ik ook wil gebruiken in pg_class of in pg_stat_user_tables. Voor basisteldoeleinden, gewoon om te zien hoe groot de dingen in het algemeen zijn, moeten beide nauwkeurig genoeg zijn.



  1. Problemen oplossen:te veel omleidingen

  2. ADO asynchroon gebruiken in Microsoft Access om formulieren te versnellen

  3. Voer de opdracht Insert uit en retourneer de ingevoegde Id in Sql

  4. Hoe klob-veldgegevens te exporteren in Oracle SQL Developer