我有一个postgres 9.3数据库,对pg_class的查询报告用于表空间的总空间为568G,服务器上的相应文件报告为685G。
不应该所有文件库都出现在pg_class中,或者我错过了什么。例如,有名为'103154174','103154174.1'的文件,依此类推为'.7'。 103154174没有出现在pg_class中。 (FWIW,这个文件的时间戳是今年6月5日)。
我错过了什么吗?当我从pg_class中选择pg_relation_filepath(c.oid)时,是否应该出现在我正在使用的数据库的目录中的那个文件,或者它是否也是包含不同命名文件的另一个表的一部分?
以下是我用于识别服务器文件的查询:
SELECT pg_relation_filepath(c.oid) filepath,
nspname,
relname,
relnamespace,
reltablespace,
(relpages * 8) / 1024 size_mb,
sum((relpages * 8) / 1024) over (partition by relnamespace) ns_total_size_mb,
sum((relpages * 8) / 1024) over (partition by reltablespace) ts_total_size_mb,
sum((relpages * 8) / 1024) over (partition by 'x') total_size_mb,
sum((relpages * 8) / 1024) over (partition by 'x'order by relpages desc) running_total_size_mb
FROM pg_class c
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
编辑:让我说清楚。我知道pg_class不包含具有.1,.2等扩展名的文件的条目。我指的是没有文件扩展名的文件(例如,上面引用的文件名103154174)。
答案 0 :(得分:1)
以.1
,.2
...结尾的文件将不显示在pg_class中。 pg_class仅列出一次的每个关系,但如果超过1 GB,则每个关系可以包含多个文件
当表或索引超过1 GB时,会将其划分为千兆字节大小的段。第一个段的文件名与filenode相同;后续段名为filenode.1,filenode.2等。
pg_relation_filepath()
只会报告“基本文件”,而不会报告其他细分。