最近我通过显示以下消息得出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,我相信我可能也错过了那里的主要观点!
答案 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
689225
:来自pg_class.oid
365
:段号。 PostgreSQL将大表分成每个1GB的范围(段)。也可能有一个前叉号码,但此路径中没有一个。
我需要花费大量的源代码来确保这一点。您想要的宏relpathbackend
位于src/include/common/relpath.h
,适合所有其他人查找,并在GetRelationPath
中调用src/common/relpath.c
。