Di PostgreSQL, setiap tabel adalah objek, menggunakan pg_relation_size('object_name') akan memberikan ukuran objek. Jika Anda mengirim tabel partisi sebagai ganti 'object_name', itu hanya memberikan ukuran objek itu tetapi bukan ukuran tabel anak.
Lihat contoh yang diberikan di bawah ini.
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() pada tabel induk tidak akan memberikan ukuran yang tepat.
postgres=# select pg_size_pretty(pg_relation_size('parent'));
pg_size_pretty
----------------
0 bytes
(1 row)
Untuk mencapai ukuran tabel partisi, pertama-tama ketahui tabel anak yang bersangkutan dan ukurannya. Menggunakan tabel katalog pg_inherits akan membantu dalam mendapatkan informasi tabel anak dengan ukuran dan kemudian menjumlahkannya untuk ukuran yang tepat. Saya telah mencoba menulis fungsi kecil menggunakan pg_inherits untuk menyelesaikannya.
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;
Sekarang, kirim tabel partisi ke fungsi tersebut.
postgres=# select pg_partition_table_size('parent');
pg_partition_table_size
-------------------------
16384
(1 row)
Apakah itu tidak berguna. Kirimkan komentar Anda, mereka akan sangat dihargai.