mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-09 08:10:09 +08:00
.. | ||
dbsize.c | ||
dbsize.sql.in | ||
Makefile | ||
README.dbsize |
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_tablespace_size(oid) int8 pg_relation_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, and support databases and tables. Please note that relation_size() only reports table file usage and not the space used by indexes and toast tables. Functions using oids are: SELECT pg_database_size(1); -- template1 database SELECT pg_tablespace_size(1663); -- pg_default tablespace SELECT pg_relation_size(1259); -- pg_class table size pg_relation_size() will report the size of the table, index and toast table OIDs, but they must be requested individually. To obtain the total size of a table including all helper files you'd have to do something like: XXX This query does not work, syntax error XXX SELECT pg_relation_size(cl.oid) AS tablesize, CASE WHEN reltoastrelid=0 THEN 0 ELSE pg_relation_size(reltoastrelid) END AS toastsize, SUM(pg_relation_size(indexrelid)) AS indexsize, pg_size_pretty(pg_relation_size(cl.oid) + pg_relation_size(reltoastrelid) + SUM(pg_relation_size(indexrelid))::int8) AS totalsize FROM pg_class cl JOIN pg_index ON cl.oid=indrelid WHERE relname = 'pg_rewrite' GROUP BY 1,2 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. Finally, load the functions into any database using dbsize.sql.