Answers:
尝试使用数据库对象大小函数。一个例子:
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()
以包括元数据并增加大小。
'"' || table_schema || '"."' || table_name || '"'
为format('%I.%I', table_schema, table_name)
。
显示数据库大小:
\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的答案摘要。)
\dti+
则可以解决问题。
这:(索引大小/使用情况统计)
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;
PostgreSQL表具有三个组成部分:表本身,表上的任何索引以及潜在的TOAST数据。在http://wiki.postgresql.org/wiki/Disk_Usage上有几个示例展示了如何将可用信息滑动和切块
仅出于信息方面,我从@aib获得了出色的答案,并对其进行了一些修改:
在实例化视图上,我们可以使用索引来同时刷新实例化视图,这允许在更新时使用它们。
好吧,我的查询将是以下内容:
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 (
-- tables from 'public'
SELECT table_name
FROM information_schema.tables
where table_schema = 'public' and table_type = 'BASE TABLE'
union
-- materialized views
SELECT oid::regclass::text as table_name
FROM pg_class
WHERE relkind = 'm'
order by table_name
) AS all_tables
-- ORDER BY total_size DESC
order by table_name
) AS pretty_sizes
以下查询将为您服务
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;
检查此Wiki。 https://wiki.postgresql.org/wiki/Disk_Usage
SELECT *,pg_size_pretty(total_bytes)作为总数 ,pg_size_pretty(index_bytes)作为索引 ,pg_size_pretty(toast_bytes)AS吐司 ,pg_size_pretty(table_bytes)如表 来自( 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 从pg_class c 左联接pg_namespace n ON n.oid = c.relnamespace 在哪里relkind ='r' ) 一个 ) 一个
尝试使用以下脚本查找所有表大小:
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/