PostgreSQL เลือกขนาดผลลัพธ์

ฉันมีตารางใน PostgreSQL DB และทำการเลือกจากตารางนี้โดยมีข้อจำกัดบางประการ และฉันต้องการทราบว่าตัวเลือกนี้มีพื้นที่ดิสก์เท่าใด ฉันรู้ว่ามีฟังก์ชัน postgres pg_total_relation_size ที่ให้ขนาดของตารางบางตารางใน DB แก่ฉัน แต่ฉันจะหาขนาด 'ตารางย่อย' ได้อย่างไร

มีไอเดียอะไรบ้าง?

ฉันใช้ PostgreSQL 9.1


person golinko    schedule 20.11.2012    source แหล่งที่มา
comment
คำสั่ง select ไม่มีขนาดดิสก์ เนื่องจากไม่ได้เก็บไว้ที่ใดเลย   -  person a_horse_with_no_name    schedule 20.11.2012
comment
โอเค ต้องเก็บก่อนถึงจะได้ไซส์? มีทางเลือกอื่นบ้างไหม? คือผมแค่อยากทราบขนาดของตารางย่อย...   -  person golinko    schedule 20.11.2012
comment
คุณสามารถเก็บพักไว้ในไฟล์ข้อความเพื่อดูขนาดข้อมูลดิบโดยประมาณโดยประมาณได้   -  person a_horse_with_no_name    schedule 20.11.2012
comment
ฉันเพิ่งพบทางเลือกอื่นต่อไปนี้: select sum(octet_length(temp.*::text)) from (select * from lesson) as temp ใช้งานได้และฉันก็ได้ขนาดของตารางในรูปแบบข้อความแทน   -  person golinko    schedule 20.11.2012


คำตอบ (1)


หากต้องการรับขนาดข้อมูล อนุญาตการบีบอัด TOAST ฯลฯ:

regress=> SELECT sum(pg_column_size(devices)) FROM devices WHERE country = 'US';
 sum 
-----
 105
(1 row)

หากต้องการรับพื้นที่จัดเก็บข้อมูลบนดิสก์ที่จำเป็น รวมถึงค่าใช้จ่ายในการจัดสรรบล็อก ส่วนหัว ฯลฯ ฯลฯ:

regress=> CREATE TEMPORARY TABLE query_out AS SELECT * FROM devices WHERE country = 'US';
SELECT 3
regress=> SELECT pg_total_relation_size('query_out');
 pg_total_relation_size 
------------------------
                  16384
(1 row)

ทำไมผลลัพธ์จึงแตกต่างกันมาก? เนื่องจากแบบสอบถามหลังกำลังรายงานขนาดของบล็อก 8k สำหรับตารางหลัก และบล็อก 8k สำหรับตาราง TOAST ไม่สนใจว่าบล็อกเหล่านี้จะว่างเปล่าเป็นส่วนใหญ่

person Craig Ringer    schedule 20.11.2012
comment
ขอบคุณ นั่นแหละสิ่งที่ฉันค้นหา octet_length ก็โอเคเช่นกัน แต่มันให้จำนวนไบต์ในสตริงไบนารี่ ดังนั้นฉันจะมีขนาดผิดถ้าสตริงเป็นเพียงข้อความ... - person golinko; 21.11.2012
comment
@ann octet_length จะไม่สะท้อนถึงการใช้พื้นที่จาก TOAST อย่างถูกต้อง ดู stackoverflow.com/questions/13304572/ - person Craig Ringer; 22.11.2012
comment
16384? สิ่งนี้หมายความว่า? มันเป็น kb หรือไบต์? - person Mohd Anas; 20.11.2014
comment
@MohdAnas คู่มือสำหรับ pg_total_relation_size บอกว่าไบต์ ฉันเดาว่ามันเป็นไบต์ หากคุณต้องการให้พิมพ์ออกมาสวย ๆ ให้ใช้ pg_size_pretty - person Craig Ringer; 20.11.2014
comment
@CraigRinger ขอบคุณ ... คุณช่วยบอกฉันได้ไหมว่าฉันต้องทำอะไรบ้างถ้าฉันต้องการได้ขนาดของหลายตารางในแบบสอบถามเดียว - person Mohd Anas; 20.11.2014
comment
@MohdAnas เข้าร่วมบน pg_class หรือระบุชื่อตารางหลายชื่อด้วยตนเอง หรือใช้รายการ VALUES เช่นเดียวกับแบบสอบถามประเภทอื่น ๆ จริงๆ - person Craig Ringer; 21.11.2014
comment
@CraigRinger คุณช่วยกรุณาเขียนแบบสอบถามตัวอย่างได้ไหม? - person Mohd Anas; 21.11.2014
comment
@MohdAnas หากคุณติดขัดหลังจากลองด้วยตัวเองแล้ว โปรดโพสต์คำถามใหม่ โปรดลิงก์กลับมาที่อันนี้เพื่อดูบริบทเมื่อคุณทำเช่นนั้น - person Craig Ringer; 21.11.2014
comment
@CraigRinger แน่นอน ขอบคุณ - person Mohd Anas; 21.11.2014
comment
@CraigRinger นี่คือคำถามของฉัน โปรดดู stackoverflow.com/questions/27054654/ - person Mohd Anas; 21.11.2014