我将从Oracle发布Postgres并寻找一种方法来查找表和索引大小,以字节/ MB/GB /等为单位,甚至更好地查找所有表的大小.在Oracle中,我有一个讨厌的长查询,查看user_lobs和user_segments以回复答案.我假设在Postgres中我可以在information_schema表中使用,但我没有看到.提前致谢.
有没有一种简单的方法可以列出PostgreSQL数据库中的所有表并按大小排序?
伪代码
SELECT * FROM tables
ORDER by tables.size
Run Code Online (Sandbox Code Playgroud)
我在用PostgreSQL 9.3.2.
我正在寻找一个返回任何数据库的表单结果的查询(请参阅下面的示例,假设数据库使用的总空间为40GB)
schema | size | relative size
----------+-------------------
foo | 15GB | 37.5%
bar | 20GB | 50%
baz | 5GB | 12.5%
Run Code Online (Sandbox Code Playgroud)
我已经设法使用按模式排序的数据库中的实体来编制一个空间列表,这很有用,但是从这个模式获取每个模式的摘要看起来并不那么容易.见下文.
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;
Run Code Online (Sandbox Code Playgroud)
这给出了结果
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 | …Run Code Online (Sandbox Code Playgroud)