Lệnh Postgres DB Kích thước


324

Có lệnh nào để tìm tất cả kích thước cơ sở dữ liệu trong Postgres không?

Tôi có thể tìm kích thước của một cơ sở dữ liệu cụ thể bằng cách sử dụng lệnh sau:

select pg_database_size('databaseName');

1
Đơn vị của nó là gì? Có phải bằng byte?
Abel Callejo

Nó là byte. :-)
john16384

Câu trả lời:


365

Và ... Nếu trong trường hợp bạn có thể không muốn nhập toàn bộ truy vấn ... bạn cũng có thể nhập ...

\l+ <database_name>

và bạn sẽ nhận được một số chi tiết về cơ sở dữ liệu, bao gồm kích thước của cơ sở dữ liệu.

Và ... Để có được kích thước của tất cả các cơ sở dữ liệu.

bạn chỉ có thể gõ ...

\l+

Bạn có thể cần phải đi vào dấu nhắc lệnh postgresql để truy vấn với các lệnh trợ giúp postgresql này.

Kiểm tra các lệnh trợ giúp postgresql khác bằng cách gõ

\?

tại dấu nhắc lệnh postgresql.


193

Bạn có thể lấy tên của tất cả các cơ sở dữ liệu mà bạn có thể kết nối từ bảng hệ thống "pg_datbase". Chỉ cần áp dụng chức năng cho các tên, như dưới đây.

select t1.datname AS db_name,  
       pg_size_pretty(pg_database_size(t1.datname)) as db_size
from pg_database t1
order by pg_database_size(t1.datname) desc;

Nếu bạn dự định đầu ra sẽ được tiêu thụ bởi một máy thay vì con người, bạn có thể cắt hàm pg_size_pretty ().


Đôi khi cơ sở dữ liệu cũng chứa các chỉ mục. Nó có một số giá trị lưu trữ. Tôi đang tìm kiếm một lệnh sẽ cung cấp kích thước của cơ sở dữ liệu hoàn chỉnh.
Tâm trí đẹp

11
@ user2151087: pg_database_size() bao gồm các kích thước cho các chỉ mục
a_horse_with_no_name

Trong trường hợp bất cứ ai thắc mắc, truy vấn này cung cấp chính xác các giá trị tương tự như \l+. Định dạng đầu ra dễ đọc hơn, mặc dù (ít cột hơn). Trao đổi giữa khả năng ghi và khả năng đọc
Skippy le Grand Gourou

158
-- Database Size
SELECT pg_size_pretty(pg_database_size('Database Name'));
-- Table Size
SELECT pg_size_pretty(pg_relation_size('table_name'));

5
Câu trả lời đó khác với Mike như thế nào?
a_horse_with_no_name

3
Đối với tương lai tôi và những người khác hạ cánh ở đây, tôi sẽ cứu bạn khỏi rắc rối: Cái này ngắn hơn và cho cơ sở dữ liệu / bảng có tên trong đó Mike dành cho tất cả các cơ sở dữ liệu trên máy chủ mà câu hỏi sau trả lời tốt hơn câu hỏi ban đầu.
James Brown

78

Dựa trên câu trả lời ở đây của @Hendy IINA

Hiển thị kích thước cơ sở dữ liệu:

\l+

ví dụ

=> \l+
 berbatik_prd_commerce    | berbatik_prd     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 19 MB   | pg_default | 
 berbatik_stg_commerce    | berbatik_stg     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 8633 kB | pg_default | 
 bursasajadah_prd         | bursasajadah_prd | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1122 MB | pg_default | 

Hiển thị kích thước bảng:

\d+

ví dụ

=> \d+
 public | tuneeca_prd | table | tomcat | 8192 bytes | 
 public | tuneeca_stg | table | tomcat | 1464 kB    | 

Chỉ hoạt động trong psql.


1
Đối với tôi, chỉ \d+ *làm việc, \d+trở lại đơn giảnDid not find any relations.
phil pirozhkov

1
@philpirozhkov Kết nối với cơ sở dữ liệu trước ( \c dbname), sau đó làm \d+.
chappjc

Đó là số một hay chữ thường L?
dman

28

Có, có một lệnh để tìm kích thước của cơ sở dữ liệu trong Postgres. Đó là như sau:

SELECT pg_database.datname as "database_name", pg_size_pretty(pg_database_size(pg_database.datname)) AS size_in_mb FROM pg_database ORDER by size_in_mb DESC;

3
Thứ tự sai trong chức năng này. Nó không thể nói sự khác biệt giữa các định dạng có thể đọc được của con người. Ví dụ: cơ sở dữ liệu có kích thước 7151 KB xuất hiện trước cơ sở dữ liệu có kích thước 7 GB.
onnimonni

Đã sửa:SELECT database_name, pg_size_pretty(size) from (SELECT pg_database.datname as "database_name", pg_database_size(pg_database.datname) AS size FROM pg_database ORDER by size DESC) as ordered;
Michael

1
Tôi nghĩ bạn chỉ cần kích thước "thô" để sắp xếp. Tôi đã sử dụng điều này thay vì một truy vấn phụ SELECT pg_database.datname AS "DB Name", pg_size_pretty(pg_database_size(pg_database.datname)) AS "Size" FROM pg_database ORDER BY (pg_database_size(pg_database.datname)) DESC;.
M-Dahab

20
SELECT pg_size_pretty(pg_database_size('name of database'));

Sẽ cung cấp cho bạn tổng kích thước của một cơ sở dữ liệu cụ thể tuy nhiên tôi không nghĩ bạn có thể thực hiện tất cả các cơ sở dữ liệu trong một máy chủ.

Tuy nhiên, bạn có thể làm điều này ...

DO
$$
DECLARE
r   RECORD;
db_size TEXT;
BEGIN
FOR r in
SELECT datname FROM pg_database
WHERE datistemplate = false
LOOP
db_size:= (SELECT pg_size_pretty(pg_database_size(r.datname)));

RAISE NOTICE 'Database:% , Size:%', r.datname , db_size;

END LOOP;
END;
$$

Tại sao nó không thể là một truy vấn duy nhất từ pg_databasechứ không phải là pl / pssql đáng ghét này?
MozenRath

12

Từ wiki PostgreSQL .


LƯU Ý: Cơ sở dữ liệu mà người dùng không thể kết nối được sắp xếp như thể chúng có kích thước vô hạn.

SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
        ELSE 'No Access'
    END AS Size
FROM pg_catalog.pg_database d
    ORDER BY
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(d.datname)
        ELSE NULL
    END DESC -- nulls first
    LIMIT 20

Trang này cũng có các đoạn để tìm kích thước của các mối quan hệ lớn nhất và các bảng lớn nhất của bạn.


4

Bạn có thể sử dụng truy vấn bên dưới để tìm kích thước của tất cả các cơ sở dữ liệu của PostgreSQL.

Tài liệu tham khảo được lấy từ blog này.

SELECT 
    datname AS DatabaseName
    ,pg_catalog.pg_get_userbyid(datdba) AS OwnerName
    ,CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(datname))
        ELSE 'No Access For You'
    END AS DatabaseSize
FROM pg_catalog.pg_database
ORDER BY 
    CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(datname)
        ELSE NULL
    END DESC;

3

Bắt đầu pgAdmin, kết nối với máy chủ, nhấp vào tên cơ sở dữ liệu và chọn tab thống kê. Bạn sẽ thấy kích thước của cơ sở dữ liệu ở cuối danh sách.

Sau đó, nếu bạn nhấp vào cơ sở dữ liệu khác, nó sẽ nằm trên tab thống kê để bạn có thể dễ dàng xem nhiều kích thước cơ sở dữ liệu mà không cần nỗ lực nhiều. Nếu bạn mở danh sách bảng, nó sẽ hiển thị tất cả các bảng và kích thước của chúng.


1
Và nếu bạn bấm vào Databasesnút cây (được gắn với kết nối DB) và chọn Statisticstab, bạn sẽ được trình bày một bản tóm tắt hay về tất cả các Cơ sở dữ liệu và kích thước của chúng (cột thứ ba).
zloster

2
du -k /var/lib/postgresql/ |sort -n |tail

2
Bạn có thể muốn thêm nhiều ngữ cảnh hơn về các giả định, điều này làm cho cơ sở dữ liệu lưu trữ dữ liệu của nó, kết quả của nó sẽ như thế nào, v.v.
fzzfzzfzz

3
Mặc dù đây có thể là một câu trả lời chính xác, nhưng tốt nhất là nên đưa ra một số lời giải thích.
bắn tỉa

Lệnh chính xác trên CentOS là lệnh này: du -k /var/lib/pgsql/ | sort -n | tail
Feriman
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.