PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để bạn tìm được số hàng cho tất cả các bảng của mình trong Postgres

Có ba cách để có được loại số lượng này, mỗi cách có sự cân bằng của riêng chúng.

Nếu bạn muốn có một số lượng đúng, bạn phải thực hiện câu lệnh SELECT giống như câu lệnh bạn đã sử dụng đối với mỗi bảng. Điều này là do PostgreSQL giữ thông tin hiển thị hàng trong chính hàng đó, chứ không phải ở bất kỳ nơi nào khác, vì vậy mọi số lượng chính xác chỉ có thể tương đối với một số giao dịch. Bạn đang đếm những gì giao dịch đó nhìn thấy vào thời điểm nó thực thi. Bạn có thể tự động điều này để chạy trên mọi bảng trong cơ sở dữ liệu, nhưng có thể bạn không cần mức độ chính xác đó hoặc muốn đợi lâu như vậy.

Cách tiếp cận thứ hai lưu ý rằng bộ thu thập số liệu thống kê theo dõi gần như có bao nhiêu hàng "sống" (không bị xóa hoặc bị lỗi bởi các bản cập nhật sau này) bất kỳ lúc nào. Giá trị này có thể bị lệch đi một chút khi hoạt động nặng, nhưng nhìn chung là một ước tính tốt:

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

Điều đó cũng có thể cho bạn biết có bao nhiêu hàng đã chết, bản thân nó cũng là một con số thú vị để theo dõi.

Cách thứ ba là lưu ý rằng lệnh ANALYZE hệ thống, được thực thi bởi quá trình autovacuum thường xuyên như PostgreSQL 8.3 để cập nhật thống kê bảng, cũng tính toán ước tính hàng. Bạn có thể lấy cái đó như thế này:

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;

Rất khó để nói truy vấn nào trong số những truy vấn này tốt hơn để sử dụng. Thông thường, tôi đưa ra quyết định dựa trên việc có thêm thông tin hữu ích mà tôi muốn sử dụng bên trong pg_class hay bên trong pg_stat_user_tables hay không. Đối với mục đích đếm cơ bản chỉ để xem mọi thứ nói chung lớn như thế nào, hoặc phải đủ chính xác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSERT [...] ON CONFLICT có thể được sử dụng cho các vi phạm khóa ngoại không?

  2. Tại sao postgres không sử dụng chỉ mục trong truy vấn của tôi

  3. Cách hoạt động của Acosh () trong PostgreSQL

  4. trong postgres, bạn có thể đặt định dạng mặc định cho dấu thời gian, theo phiên hoặc toàn cầu không?

  5. Phiên bản postgresql 9.2 pg_dump không khớp