加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在PostgreSQL数据库中具有大小(相对和绝对)的模式列表

发布时间:2020-12-13 16:28:22 所属栏目:百科 来源:网络整理
导读:我正在寻找一个返回任何数据库的窗体结果的查询 (参见下面的示例假设数据库使用的总空间是40GB) schema | size | relative size----------+-------------------foo | 15GB | 37.5% bar | 20GB | 50%baz | 5GB | 12.5% 我已经设法使用数据库中的实体在模式中
我正在寻找一个返回任何数据库的窗体结果的查询
(参见下面的示例假设数据库使用的总空间是40GB)
schema | size | relative size
----------+-------------------
foo    | 15GB |   37.5%      
bar    | 20GB |     50%
baz    |  5GB |   12.5%

我已经设法使用数据库中的实体在模式中排列的空间列表,
这是有用的,但是从每个模式获取摘要看起来并不容易.
见下文.

SELECT relkind,relname,pg_catalog.pg_namespace.nspname,pg_size_pretty(pg_relation_size(pg_catalog.pg_class.oid))
FROM   pg_catalog.pg_class
       INNER JOIN pg_catalog.pg_namespace
         ON relnamespace = pg_catalog.pg_namespace.oid
ORDER  BY pg_catalog.pg_namespace.nspname,pg_relation_size(pg_catalog.pg_class.oid) DESC;

这给出了结果

relkind |                relname                |      nspname       | pg_size_pretty 
---------+---------------------------------------+--------------------+----------------
  r       | geno                                  | btsnp              | 11 GB
  i       | geno_pkey                             | btsnp              | 5838 MB
  r       | anno                                  | btsnp              | 63 MB
  i       | anno_fid_key                          | btsnp              | 28 MB
  i       | ix_btsnp_anno_rsid                    | btsnp              | 28 MB
  [...]
  r       | anno                                  | btsnp_shard        | 63 MB
  r       | geno4681                              | btsnp_shard        | 38 MB
  r       | geno4595                              | btsnp_shard        | 38 MB
  r       | geno4771                              | btsnp_shard        | 38 MB
  r       | geno4775                              | btsnp_shard        | 38 MB

看起来像使用像SUM这样的聚合运算符可能是必要的,到目前为止没有成功.

Regards,Faheem
尝试这个:
SELECT schema_name,sum(table_size),(sum(table_size) / database_size) * 100
FROM (
  SELECT pg_catalog.pg_namespace.nspname as schema_name,pg_relation_size(pg_catalog.pg_class.oid) as table_size,sum(pg_relation_size(pg_catalog.pg_class.oid)) over () as database_size
  FROM   pg_catalog.pg_class
     JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
) t
GROUP BY schema_name,database_size

编辑:只是注意到,总结所有表以获取数据库大小的解决方法是不必要的:

SELECT schema_name,pg_size_pretty(sum(table_size)::bigint),(sum(table_size) / pg_database_size(current_database())) * 100
FROM (
  SELECT pg_catalog.pg_namespace.nspname as schema_name,pg_relation_size(pg_catalog.pg_class.oid) as table_size
  FROM   pg_catalog.pg_class
     JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
) t
GROUP BY schema_name
ORDER BY schema_name

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读