Postgres DB Size Command


324

มีคำสั่งให้ค้นหาขนาดฐานข้อมูลทั้งหมดใน Postgres หรือไม่?

ฉันสามารถหาขนาดของฐานข้อมูลเฉพาะโดยใช้คำสั่งต่อไปนี้:

select pg_database_size('databaseName');

1
หน่วยคืออะไร มันเป็นไบต์?
Abel Callejo

มันเป็นไบต์ :-)
john16384

คำตอบ:


365

และ ... หากในกรณีที่คุณไม่ต้องการพิมพ์ข้อความค้นหาทั้งหมด ... คุณสามารถพิมพ์ ...

\l+ <database_name>

และคุณจะได้รับรายละเอียดบางอย่างเกี่ยวกับฐานข้อมูลรวมถึงขนาดของฐานข้อมูล

และ ... เพื่อให้ได้ขนาดฐานข้อมูลทั้งหมด

คุณสามารถพิมพ์ ...

\l+

คุณอาจต้องเข้าไปที่พรอมต์คำสั่ง postgresql เพื่อสอบถามด้วยคำสั่ง postgresql helper

ตรวจสอบคำสั่ง postgresql helper อื่น ๆ โดยพิมพ์

\?

ที่พรอมต์คำสั่ง postgresql


193

คุณสามารถรับชื่อของฐานข้อมูลทั้งหมดที่คุณสามารถเชื่อมต่อได้จากตารางระบบ "pg_datbase" เพียงใช้ฟังก์ชั่นกับชื่อดังต่อไปนี้

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;

หากคุณต้องการให้เอาต์พุตใช้โดยเครื่องแทนมนุษย์คุณสามารถตัดฟังก์ชัน pg_size_pretty ()


บางครั้งฐานข้อมูลมีดัชนีด้วย มันมีค่าการจัดเก็บบางส่วน ฉันกำลังมองหาคำสั่งเดียวที่จะให้ขนาดของฐานข้อมูลที่สมบูรณ์
ใจที่สวยงาม

11
@ user2151087: pg_database_size() รวมขนาดของดัชนี
a_horse_with_no_name

\l+ในกรณีที่คนถูกสงสัยแบบสอบถามนี้ให้ตรงค่าเช่นเดียวกับ รูปแบบเอาต์พุตอ่านง่ายกว่า (มีคอลัมน์น้อยกว่า) แลกเปลี่ยนระหว่างความสามารถเขียนได้และการอ่านได้ ...
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
คำตอบนั้นต่างจากของไมค์อย่างไร?
a_horse_with_no_name

3
สำหรับอนาคตฉันและคนอื่น ๆ ลงจอดที่นี่ฉันจะช่วยคุณประหยัดปัญหา: อันนี้สั้นกว่าและสำหรับชื่อฐานข้อมูล / ตารางที่Mike'sมีไว้สำหรับฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์ซึ่งหลังตอบคำถามได้ดีกว่า
James Brown

78

ตามคำตอบที่นี่โดย@Hendy Irawan

แสดงขนาดฐานข้อมูล:

\l+

เช่น

=> \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 | 

แสดงขนาดตาราง:

\d+

เช่น

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

psqlจะทำงานเฉพาะใน


1
สำหรับฉัน\d+ *ทำงานได้แค่\d+ส่งคืนธรรมดาDid not find any relations.
phil pirozhkov

1
@philpirozhkov เชื่อมต่อกับฐานข้อมูลครั้งแรก ( \c dbname) \d+แล้วทำ
chappjc

นั่นคือหมายเลขหนึ่งหรือตัวพิมพ์เล็ก L หรือไม่
dman

28

ใช่มีคำสั่งให้ค้นหาขนาดของฐานข้อมูลใน Postgres มันคือต่อไปนี้:

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
การสั่งซื้อผิดในฟังก์ชั่นนี้ ไม่สามารถบอกความแตกต่างระหว่างรูปแบบที่มนุษย์อ่านได้ ตัวอย่างเช่นฐานข้อมูลขนาด 7151 KB มาก่อนฐานข้อมูลขนาด 7 GB
onnimonni

คงที่: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;
ไมเคิล

1
ฉันคิดว่าคุณต้องการขนาด "ดิบ" สำหรับการจัดเรียงเท่านั้น 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'));

จะให้ขนาดทั้งหมดของฐานข้อมูลเฉพาะ แต่ฉันไม่คิดว่าคุณสามารถทำฐานข้อมูลทั้งหมดภายในเซิร์ฟเวอร์

อย่างไรก็ตามคุณสามารถทำเช่นนี้ ...

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;
$$

เหตุใดจึงไม่สามารถใช้แบบสอบถามเดียวได้pg_databaseแทนที่จะเป็น pl / pgsql ที่น่าเกลียดนี้
MozenRath

12

จากวิกิพีเดีย PostgreSQL


หมายเหตุ: ฐานข้อมูลที่ผู้ใช้ไม่สามารถเชื่อมต่อได้จะถูกจัดเรียงราวกับว่ามีขนาดไม่ จำกัด

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

หน้านี้ยังมีตัวอย่างข้อมูลเพื่อค้นหาขนาดของความสัมพันธ์ที่ยิ่งใหญ่ที่สุดและตารางที่ใหญ่ที่สุดของคุณ


4

คุณสามารถใช้แบบสอบถามด้านล่างเพื่อค้นหาขนาดของฐานข้อมูลทั้งหมดของ PostgreSQL

การอ้างอิงนั้นมาจากบล็อกนี้

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

เริ่ม pgAdmin เชื่อมต่อกับเซิร์ฟเวอร์คลิกที่ชื่อฐานข้อมูลและเลือกแท็บสถิติ คุณจะเห็นขนาดของฐานข้อมูลที่ด้านล่างของรายการ

จากนั้นหากคุณคลิกที่ฐานข้อมูลอื่นระบบจะยังคงอยู่ในแท็บสถิติเพื่อให้คุณสามารถดูขนาดฐานข้อมูลได้หลากหลายโดยไม่ต้องใช้ความพยายามมากนัก หากคุณเปิดรายการตารางมันจะแสดงตารางและขนาดทั้งหมด


1
และถ้าคุณคลิกที่Databasesโหนดต้นไม้ (แนบกับการเชื่อมต่อฐานข้อมูล) และเลือกStatisticsแท็บที่คุณจะนำเสนอด้วยการสรุปที่ดีของฐานข้อมูลและขนาดของพวกเขาทั้งหมด (คอลัมน์ที่สาม)
zloster

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

2
คุณอาจต้องการเพิ่มบริบทเพิ่มเติมเกี่ยวกับสมมติฐานที่ทำให้ฐานข้อมูลเก็บข้อมูลเอาท์พุทของสิ่งนี้จะเป็นอย่างไร ฯลฯ
fzzfzzfzz

3
แม้ว่านี่อาจเป็นคำตอบที่ถูกต้อง แต่ก็เป็นวิธีที่ดีที่สุดในการรวมคำอธิบาย
sniperd

คำสั่งที่ถูกต้องใน CentOS คืออันนี้: du -k /var/lib/pgsql/ | sort -n | tail
Feriman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.