你如何findPostgres / PostgreSQL表及其索引的磁盘大小

我来自甲骨文的Postgres,并寻找一种方法来查找以字节/ MB / GB /等为单位的表和索引大小,或者甚至是所有表的大小。 在甲骨文,我有一个讨厌的长查询,看着user_lobs和user_segments回馈一个答案。 我假设在Postgres中有一些我可以在information_schema表中使用的东西,但是我没有看到在哪里。 提前致谢。

尝试数据库对象大小函数 。 一个例子:

SELECT pg_size_pretty(pg_total_relation_size('"schema"."Table"')); 

对于所有的表格,大致如下:

 SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size FROM information_schema.tables ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC 

编辑:这是由@phord提交的查询,为了方便起见:

 SELECT table_name, pg_size_pretty(table_size) AS table_size, pg_size_pretty(indexes_size) AS indexes_size, pg_size_pretty(total_size) AS total_size FROM ( SELECT table_name, pg_table_size(table_name) AS table_size, pg_indexes_size(table_name) AS indexes_size, pg_total_relation_size(table_name) AS total_size FROM ( SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name FROM information_schema.tables ) AS all_tables ORDER BY total_size DESC ) AS pretty_sizes 

我已经稍微修改了它,使用pg_table_size()来包含元数据,并使大小加起来。

显示数据库大小:

\l+

例如

 => \l+ berbatik_prd_commerce | berbatik_prd | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 19 MB | pg_default | berbatik_stg_commerce | berbatik_stg | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8633 kB | pg_default | bursasajadah_prd | bursasajadah_prd | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 1122 MB | pg_default | 

显示表格大小:

\d+

例如

 => \d+ public | tuneeca_prd | table | tomcat | 8192 bytes | public | tuneeca_stg | table | tomcat | 1464 kB | 

只适用于psql

( @ zkutch的回答总结。)

如果数据库名称是snort ,则下面的语句给出它的大小:

 psql snort -c "\l+" | grep snort | awk -F "|" '{print $7}' 

PostgreSQL表包含三个组件:表本身,其上的任何索引以及可能的TOAST数据。 有几个例子显示了如何在http://wiki.postgresql.org/wiki/Disk_Usage上以不同的方式滑动和切割可用的信息;

Tyr这个:(索引大小/使用统计)

 SELECT t.tablename, indexname, c.reltuples AS num_rows, pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size, pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size, CASE WHEN indisunique THEN 'Y' ELSE 'N' END AS UNIQUE, idx_scan AS number_of_scans, idx_tup_read AS tuples_read, idx_tup_fetch AS tuples_fetched FROM pg_tables t LEFT OUTER JOIN pg_class c ON t.tablename=c.relname LEFT OUTER JOIN ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x JOIN pg_class c ON c.oid = x.indrelid JOIN pg_class ipg ON ipg.oid = x.indexrelid JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid ) AS foo ON t.tablename = foo.ctablename WHERE t.schemaname='public' ORDER BY 1,2; 

检查这个维基。 https://wiki.postgresql.org/wiki/Disk_Usage

 SELECT *,pg_size_pretty(total_bytes)总数
     ,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
               ,c.reltuples AS row_estimate
               ,pg_total_relation_size(c.oid)AS total_bytes
               ,pg_indexes_size(c.oid)AS index_bytes
               ,pg_total_relation_size(reltoastrelid)AS toast_bytes
           FROM pg_class c
           LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
          在哪里relkind ='r'
   ) 一个
 ) 一个

下面的查询将为您服务

 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 20; 

看到这个链接: https : //wiki.postgresql.org/wiki/Disk_Usage

试试这个脚本来查找所有的表大小:

 SELECT table_schema || '.' || table_name AS TableName, pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS TableSize FROM information_schema.tables ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC 

对于在PostgreSQL中查找大小的其他不同脚本,请访问以下URL: http : //www.dbrnd.com/2015/05/how-to-find-size-of-database-and-table-in-postgresql/