mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-31 04:37:23 +02:00
52 lines
1.8 KiB
Plaintext
52 lines
1.8 KiB
Plaintext
This module contains several functions that report the size of a given
|
|
database object:
|
|
|
|
int8 database_size(name)
|
|
int8 relation_size(text)
|
|
|
|
int8 pg_database_size(oid)
|
|
int8 pg_relation_size(oid)
|
|
int8 pg_tablespace_size(oid)
|
|
|
|
text pg_size_pretty(int8)
|
|
|
|
The first two functions:
|
|
|
|
SELECT database_size('template1');
|
|
SELECT relation_size('pg_class');
|
|
|
|
take the name of the object (possibly schema-qualified, for relation_size),
|
|
while these functions take object OIDs:
|
|
|
|
SELECT pg_database_size(1); -- template1 database
|
|
SELECT pg_relation_size(1259); -- pg_class table size
|
|
SELECT pg_tablespace_size(1663); -- pg_default tablespace
|
|
|
|
Please note that relation_size and pg_relation_size report only the size of
|
|
the selected relation itself; any subsidiary indexes or toast tables are not
|
|
counted. To obtain the total size of a table including all helper files
|
|
you'd have to do something like:
|
|
|
|
SELECT *,
|
|
pg_size_pretty(tablesize+indexsize+toastsize+toastindexsize) AS totalsize
|
|
FROM
|
|
(SELECT pg_relation_size(cl.oid) AS tablesize,
|
|
COALESCE((SELECT SUM(pg_relation_size(indexrelid))::bigint
|
|
FROM pg_index WHERE cl.oid=indrelid), 0) AS indexsize,
|
|
CASE WHEN reltoastrelid=0 THEN 0
|
|
ELSE pg_relation_size(reltoastrelid)
|
|
END AS toastsize,
|
|
CASE WHEN reltoastrelid=0 THEN 0
|
|
ELSE pg_relation_size((SELECT reltoastidxid FROM pg_class ct
|
|
WHERE ct.oid = cl.reltoastrelid))
|
|
END AS toastindexsize
|
|
FROM pg_class cl
|
|
WHERE relname = 'foo') ss;
|
|
|
|
This sample query utilizes the helper function pg_size_pretty(int8),
|
|
which formats the number of bytes into a convenient string using KB, MB,
|
|
GB. It is also contained in this module.
|
|
|
|
To install, just run make; make install. Then load the functions
|
|
into any database using dbsize.sql.
|