postgresql/contrib/dbsize
Tom Lane d9b68c8061 Code review for recent dbsize changes. Fix some thinkos, enforce coding
style and message style standards, improve documentation.
2004-09-28 19:35:43 +00:00
..
dbsize.c Code review for recent dbsize changes. Fix some thinkos, enforce coding 2004-09-28 19:35:43 +00:00
dbsize.sql.in Code review for recent dbsize changes. Fix some thinkos, enforce coding 2004-09-28 19:35:43 +00:00
Makefile > Please find enclose a submission to fix these problems. 2004-08-20 20:13:10 +00:00
README.dbsize Code review for recent dbsize changes. Fix some thinkos, enforce coding 2004-09-28 19:35:43 +00:00

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.