pg_tblspc中的oid在哪里错误消息

时间:2015-08-19 10:30:27

标签: postgresql postgresql-9.3

最近我通过显示以下消息得出could not read block错误:

pg_tblspc/16010/PG_9.3_201306121/16301/689225.365

发生此错误后,我尝试将以下几个数字设为oid来尝试以下查询,但我的查询结果为空行。

select oid,relname from pg_class where oid=16010 or oid=16301;

现在我的问题是,pg_tablspc上有哪些数字?我已经完成了link,我相信我可能也错过了那里的主要观点!

1 个答案:

答案 0 :(得分:1)

http://blog.2ndquadrant.com/postgresql-filename-to-table/

更新:很多更详细的说明

以下信息不考虑真空充满等引起的relfilenode更改。

在:

pg_tblspc/16010/PG_9.3_201306121/16301/689225.365

我们有:

  • pg_tblspc:表示它是默认或全局表空间以外的表空间中的关系
  • 16010:来自pg_tablespace.oid的表空间,
  • PG_9.3_201306121:特定于版本的特定于catversion的字符串,允许不同的Pg版本在表空间中共存,
  • 16301:来自pg_database.oid
  • 的数据库oid
  • 689225:来自pg_class.oid
  • 的关系oid
  • 365:段号。 PostgreSQL将大表分成每个1GB的范围(段)。

也可能有一个前叉号码,但此路径中没有一个。

我需要花费大量的源代码来确保这一点。您想要的宏relpathbackend位于src/include/common/relpath.h,适合所有其他人查找,并在GetRelationPath中调用src/common/relpath.c