postgresql - 如何找到特定操作系统数据文件关联的 postgres 表?

标签 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.2 ...结尾的文件不会出现在pg_class中。 pg_class 只列出每个关系一次,但如果超过 1 GB,每个关系可以包含多个文件

Quote from the manual

When a table or index exceeds 1 GB, it is divided into gigabyte-sized segments. The first segment's file name is the same as the filenode; subsequent segments are named filenode.1, filenode.2, etc.

pg_relation_filepath() 将仅报告“基本文件”,而不是其他段。

关于postgresql - 如何找到特定操作系统数据文件关联的 postgres 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44553358/

相关文章:

ruby-on-rails - rails/康康康 : Define ability with a complex/scoped query

node.js - pg- promise 。查询在使用原始查询时有效,但在使用助手时无效

postgresql - 如何解决空 docker-entrypoint-initdb.d 的问题? (PostgresQL + docker )

sql - 如何使用日期打破总和结果的平局?

Delphi BDE PostgreSQL查询执行(语法错误)

string - 创建文本字符串得到错误的输出(postgresql)

Django/postgres 事务隔离级别设置被忽略

sql - 如何只更新 PostgreSQL 9.4 中另一个表的更改值?

postgresql - 从 PostgreSQL 函数返回 NULL 而不是复合值

node.js - Sequelize - 如何使用几何值为数据库播种?