在查找数据对象的物理文件上,greenplum和postgresql不太一样
postgresql只要查找 select oid,relname from pg_class where relname = '数据对象';得到oid,用这个oid即可。
但gp由于是多个节点组成,所以直接找oid是无效的,需要查找每个子表上的内容。
例如在gp库中创建一个表,插入数据并执行了checkpoint
首先登录master,查找 select oid,relname,relfilenode from pg_class where relname = 'test1';在GP里实际关键需要的是relfilenode 这个值。
然后在master上,以数据库正常运行的模式,直接连接每个子节点的primary,例如当前系统有两个数据节点,则:
PGOPTIONS='-c gp_session_role=utility' psql -h node02 gpdb_test -p 40000
连接node02上的primary,在执行select oid,relname,relfilenode from pg_class where relname = 'test1';
发现在这个子表上,test1的relfilenode 是16384.
同理查找另一个子表上的这个值。
同样是16384,由于数据对象分布的问题,很有可能相同的数据对象在每个节点上的relfilenode 不同。
接下来到数据目录里查找对应编号的物理文件。
注意在数据节点上进行查找,如下,找到了对应的物理文件。