Greenplum 数据库备份,pg_dump:schema with OID 17660566 does not exist

来源:互联网 发布:如何取消淘宝店铺差评 编辑:程序博客网 时间:2024/09/21 09:24

背景:客户现场需要主备两套系统,备机定时同步主机的数据,同步时,先删掉备机上本来的数据,然后备份主机的数据后恢复,使用pg_dump,psql命令。(需同步的数据量很小)。在经过几次备份后,备机不能同步主机数据,后经排查,是允许pg_dump命令时出错。报错: pg_dump:schema with OID 17660566does not exist。对于一个刚入门gp的小白,真的很为难,然后开始网上查资料,各种英文资料乱翻一通,解决方法如下:

1.首先考虑出现这个问题的原因:

OID是每个表空间,表,索引,数据文件,函数,约束等的唯一标识,报错中显示,schema 17660566不存在,很明显,备机同步主机的时候,需要先删数据,这些数据在一个模式config下,有可能17660566是已经删掉的config,为什么已经删掉的还报错呢?

查询gp数据库最重要的一张系统表 pg_class

select * from pg_class where relnamespace=17660566

1.11.1

的确存在这个东西,是一个序列。

继续查询pg_type这张表

select * from pg_type where typnamespace=17660566

1.21.2

还是它!!!

很明显,这是多余的,当前的config模式的OID跟这玩意儿没一点关系

1.31.3

那就删除它!!!

修改系统表:

1.关闭数据库 gpstop-M fast -a

1.41.4

2.启动数据库到master模式 gpstart-m -a

1.5

3.切换到管理模式,并修改系统表(图片删除部分使用测试环境,无17660566该条数据)

PGOPTIONS="-c gp_session_role=utility" psql  --进入管理模式

set allow_system_table_mods='dml'; --获取修改系统表权限。

delete from pg_class where relnamespace=17660566;

delete from pg_type where typnamespace=17660566;

1.6

4.关闭master模式,启动数据库

gpstop -m 

gpstart -a

1.7

 


原创粉丝点击