今天备份GP一个现场表结构的时候,出现一个新问题,导致表结构无法备份,有没有了解的朋友帮助解答一下或者顺一下思路。
备份语句:pg_dump -s -f xxx_str_20160323.sql xxx
报错日志:pg_dump: Got 0 rows instead of one from: SELECT proretset, prosrc, probin, proallargtypes, proargmodes, proargnames, provolatile, proisstrict, prosecdef, (SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) as lanname FROM pg_catalog.pg_proc WHERE oid = '4752124'::pg_catalog.oid
这个问题最终我自己解决了,具体的方法如下:
1.我先用语句查了一下这个id所代表的对象,发现是一个叫inc_tf_ipadd_pool_vol_hour的存储过程导致的:
2.虽然4752124这个id可以从上图看到,但是用这个id作为条件去查,是查不到结果的;但是正常的对象是可以查到结果的,如下:
3.所以我考虑到应该是这个对象出问题了,于是我查看了一下这个存储过程,发现有两个同名的存储过程存在与系统中,如下:
4.我把这俩存储过程删了(其实删一个另一个会自动消失),然后重建了一下。又重新进行导出。但是仍然还会出现那个问题。
5.于是我又查询了一下第一步,发现那个oid还是存在的,最后我孤注一掷,把这个id删掉,再导出就没问题了。
deletefrompg_catalog.pg_procwhereoid>4752123andoid<4752125;--这里使用范围删除,是因为用4752124去删除无效,所以只能在界定范围内删除。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。