如何找到与特定OS数据文件关联的postgres表?

时间:2017-06-14 19:39:01

标签: postgresql

我有一个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)。

1 个答案:

答案 0 :(得分:1)

.1.2 ...结尾的文件将显示在pg_class中。 pg_class仅列出一次的每个关系,但如果超过1 GB,则每个关系可以包含多个文件

Quote from the manual

  

当表或索引超过1 GB时,会将其划分为千兆字节大小的段。第一个段的文件名与filenode相同;后续段名为filenode.1,filenode.2等。

pg_relation_filepath()只会报告“基本文件”,而不会报告其他细分。