Postgres: kiểm tra không gian đĩa được thực hiện bởi chế độ xem cụ thể?


14

Tôi biết cách kiểm tra kích thước của các chỉ mục và bảng trong Postgres (Tôi đang sử dụng phiên bản 9.4):

SELECT
   relname AS objectname,
   relkind AS objecttype,
   reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
   FROM pg_class
   WHERE relpages >= 8
   ORDER BY relpages DESC;

Nhưng điều này không hiển thị quan điểm cụ thể hóa. Làm thế nào tôi có thể kiểm tra dung lượng đĩa mà chúng đang chiếm?

Câu trả lời:


22

Điều này giả định rằng các quan điểm cụ thể hóa có relpages >= 8trong pg_classđó, không phải là trường hợp. Nó thực sự có thể trống - chưa được điền, được chỉ định bởi pg_class.relispopulated = FALSE. Tệp đĩa tương ứng có kích thước bằng không trong trường hợp này.

Thay vào đó hãy thử:

SELECT relname   AS objectname
     , relkind   AS objecttype
     , reltuples AS entries
     , pg_size_pretty(pg_table_size(oid)) AS size  -- depending - see below
FROM   pg_class
WHERE  relkind IN ('r', 'i', 'm')
ORDER  BY pg_table_size(oid) DESC;

Trường hợp các loại có sẵn là :

r= bảng thông thường,
i= chỉ mục,
S= trình tự,
v= chế độ xem,
m= chế độ xem cụ thể hóa,
c= loại tổng hợp,
t= bảng TOAST,
f= bảng nước ngoài

Sử dụng một trong các hàm kích thước đối tượng cơ sở dữ liệu thay vì xây dựng của riêng bạn. Xin lưu ý rằng "kích thước của bảng" có thể được định nghĩa theo các cách khác nhau. Chi tiết:


1
Câu trả lời đúng thực sự. Lưu ý rằng thứ tự theo kích thước là sai lệch khi bạn in kích thước ở dạng có thể đọc được của con người, sắp xếp thứ tự theo từ vựng
Jack

@Jack: Điểm tốt. Tôi thêm một cách hợp lý hơn ORDER BY.
Erwin Brandstetter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.