PostgreSQL में, प्रत्येक तालिका एक वस्तु है, pg_relation_size('object_name') का उपयोग करके वस्तु का आकार देगा। यदि आप 'ऑब्जेक्ट_नाम' के स्थान पर विभाजन तालिका भेजते हैं, तो यह केवल उस ऑब्जेक्ट का आकार देता है, लेकिन चाइल्ड टेबल के आकार को नहीं।
नीचे दिया गया उदाहरण देखें।
postgres=# dt+
List of relations
Schema | Name | Type | Owner | Size | Description
--------+---------------+-------+----------+------------+-------------
public | child1 | table | postgres | 8192 bytes |
public | child2 | table | postgres | 8192 bytes |
public | parent | table | postgres | 0 bytes |
(3 rows)
pg_relation_size() पैरेंट टेबल पर सटीक आकार नहीं देगा।
postgres=# select pg_size_pretty(pg_relation_size('parent'));
pg_size_pretty
----------------
0 bytes
(1 row)
विभाजन तालिका का आकार प्राप्त करने के लिए, सबसे पहले संबंधित चाइल्ड टेबल और उसके आकार को जानें। pg_inherits कैटलॉग तालिका का उपयोग करने से आकार के साथ चाइल्ड टेबल की जानकारी प्राप्त करने में मदद मिलेगी और बाद में उन्हें सटीक आकार के लिए जोड़ दिया जाएगा। मैंने इसे पूरा करने के लिए pg_inherits का उपयोग करके एक छोटा सा फ़ंक्शन लिखने का प्रयास किया है।
CREATE OR REPLACE FUNCTION pg_partition_table_size(text) returns numeric as
$$
select sum(to_number(pg_size_pretty(pg_relation_size(inhrelid::regclass)),'999999999')) from pg_inherits where inhparent=$1::regclass;
$$ language sql;
अब, पार्टीशन टेबल को फंक्शन में भेजें।
postgres=# select pg_partition_table_size('parent');
pg_partition_table_size
-------------------------
16384
(1 row)
क्या यह उपयोगी नहीं है। अपनी टिप्पणियाँ पोस्ट करें, उनकी बहुत सराहना की जाएगी।