Created
November 8, 2020 21:34
-
-
Save sandcastle/18d319b04554b7b4f286c64bc2ae5b1d to your computer and use it in GitHub Desktop.
Postgres table sizes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
WITH RECURSIVE pg_inherit(inhrelid, inhparent) AS | |
(select inhrelid, inhparent | |
FROM pg_inherits | |
UNION | |
SELECT child.inhrelid, parent.inhparent | |
FROM pg_inherit child, pg_inherits parent | |
WHERE child.inhparent = parent.inhrelid), | |
pg_inherit_short AS (SELECT * FROM pg_inherit WHERE inhparent NOT IN (SELECT inhrelid FROM pg_inherit)) | |
SELECT table_schema | |
, TABLE_NAME | |
, row_estimate | |
, pg_size_pretty(total_bytes) AS total | |
, pg_size_pretty(index_bytes) AS INDEX | |
, pg_size_pretty(toast_bytes) AS toast | |
, pg_size_pretty(table_bytes) AS TABLE | |
FROM ( | |
SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes | |
FROM ( | |
SELECT c.oid | |
, nspname AS table_schema | |
, relname AS TABLE_NAME | |
, SUM(c.reltuples) OVER (partition BY parent) AS row_estimate | |
, SUM(pg_total_relation_size(c.oid)) OVER (partition BY parent) AS total_bytes | |
, SUM(pg_indexes_size(c.oid)) OVER (partition BY parent) AS index_bytes | |
, SUM(pg_total_relation_size(reltoastrelid)) OVER (partition BY parent) AS toast_bytes | |
, parent | |
FROM ( | |
SELECT pg_class.oid | |
, reltuples | |
, relname | |
, relnamespace | |
, pg_class.reltoastrelid | |
, COALESCE(inhparent, pg_class.oid) parent | |
FROM pg_class | |
LEFT JOIN pg_inherit_short ON inhrelid = oid | |
WHERE relkind IN ('r', 'p') | |
) c | |
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace | |
) a | |
WHERE oid = parent | |
) a | |
ORDER BY total_bytes DESC | |
; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment