暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

greenplum 通过数据块查询对应的表

前提条件:一般在磁盘坏块报错信息提示中,可以得到 “磁盘块标识符”。举例:本次泰山库的 bass_mod 数据库,磁盘块标识符为 “208483865”。



如果不知道是那个数据库的情况下,一般报错提示中,磁盘坏块的前一个数字就是数据库的 oid。执行下列语句可得出是那个数据库。举例本次数据库的 oid 为 25097。


Select oid,* frome pg_database;


查询出 25097 对应的数据库为 bass_mod。



在表类型是 ao 的情况下



登录磁盘坏块所在的数据库,并查询 pg_appendonly 系统表中的 segrelid 字段 (字段含义:表在磁盘上的文件标识符),查询条件是磁盘块标识符为 “208483865”。


登录数据库(如果不是默认的 bass_mod 则执行 psql -d “指定的数据库名”)


Psql



查询语句


Select * from pg_appendonly where segrelid = 208483865;



执行完成后可得到 208483865 磁盘标识符在 pg_appendonly 中的所有信息。本次任务所需要的是 relid 字段(含义:AO 表的对象标识符,个人理解为 ao 表的 oid)的数据为 “208483860”。



得到 relid 之后只需将 relid 与 regclass(oid 的别名,个人理解像是一个函数,代表的是一个在 pg_class 表的 sql 查询语句)拼在一起,就可以得到这个磁盘标识符的表名。语句如下:


Select 208483860::regclass;


得到表名 dwd.dwd_a_ac_backgiftrec_dm_1_prt_p20210805



在表类型是 heap(堆存储) 的情况下


登录磁盘坏块所在的数据库,并查询 pg_class 系统表中的 relfilenode 字段 (字段含义:关系在磁盘上的文件的名字,如果没有则为 0),查询条件是磁盘块标识符为 “171209851”。语句如下:


登录数据库(如果不是默认的 bass_mod 则是 psql -d “指定的数据库名”)


Psql



查询语句:


Select * from pg_class where relfilenode = ‘171209851’;


执行完成后可直接得到表名字段 relname,本次查询的表名为 “a”.

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论