PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak znaleźć liczbę wierszy dla wszystkich stołów w Postgresie?

Istnieją trzy sposoby na uzyskanie tego rodzaju liczby, każdy z własnymi kompromisami.

Jeśli chcesz uzyskać prawdziwą liczbę, musisz wykonać instrukcję SELECT, taką jak ta, której użyłeś dla każdej tabeli. Dzieje się tak, ponieważ PostgreSQL przechowuje informacje o widoczności wierszy w samym wierszu, a nie nigdzie indziej, więc każda dokładna liczba może dotyczyć tylko jakiejś transakcji. Otrzymujesz liczbę tego, co ta transakcja widzi w momencie wykonania. Mógłbyś to zautomatyzować, aby działał z każdą tabelą w bazie danych, ale prawdopodobnie nie potrzebujesz takiego poziomu dokładności ani nie chcesz czekać tak długo.

Drugie podejście zwraca uwagę, że moduł zbierający statystyki śledzi z grubsza, ile wierszy jest „aktywnych” (nie usuniętych ani przestarzałych przez późniejsze aktualizacje) w dowolnym momencie. Ta wartość może nieco się różnić przy dużej aktywności, ale generalnie jest to dobre oszacowanie:

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

Może to również pokazać, ile wierszy jest martwych, co samo w sobie jest interesującą liczbą do monitorowania.

Trzecim sposobem jest zauważenie, że polecenie systemowe ANALYZE, które jest regularnie wykonywane przez proces autovacuum od PostgreSQL 8.3 w celu aktualizacji statystyk tabeli, również oblicza oszacowanie wiersza. Możesz go złapać w ten sposób:

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;

Trudno powiedzieć, które z tych zapytań jest lepsze. Zwykle podejmuję tę decyzję w oparciu o to, czy jest więcej przydatnych informacji, których chcę również użyć wewnątrz pg_class lub wewnątrz pg_stat_user_tables. Do podstawowych celów liczenia, aby zobaczyć, jak duże są ogólnie rzeczy, obie powinny być wystarczająco dokładne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować wielkość liter w PostgreSQL

  2. Jak zdekodować dzienniki błędów PostgreSQL

  3. Błąd podczas instalacji Psycopg2 na MacOS 10.9.5

  4. Pule połączeń z Pgbouncer w PostgreSQL 9.0

  5. Jak znaleźć liczbę wierszy dla wszystkich stołów w Postgresie?