暂无图片
connot open relation with oid xxx
我来答
分享
手机用户5593
2023-12-18
connot open relation with oid xxx

现象描述:发现navicat 的某个schema下视图全没了,查询了pg_class 发现视图还在,但是页面没有显示。查看navicat后台日志,当页面点击【视图】列表的时候,后台会报error:could not open relation with oid xxx,这个xxx在pg_class查不到记录,在文件系统data目录上能找到对应的xxx和xxx.fsm文件。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
手机用户5593

问题已找到。有人误删除了pg_class的相关记录,导致对应的relation无法访问报错error:could not open relation with oid xxx。navicat的【视图】需要用到pg_get_viewdef函数获取视图的定义,当pg_get_viewdef访问到的视图涉及到在pg_class中被误删除的表就会报count not open relation with oid xxx,进而导致navicat的【视图】列表为空。应涉及到的视图和基表都无法访问,最后的解决方法:通过shell脚本遍历库中的所有视图找出异常视图并drop掉,根据遍历得到的报错的oid在pg_type中找到对应的记录,再到pg_depend删除依赖记录并执行drop type/table,最后重建基表和视图后navicat和业务都恢复正常。

暂无图片 评论
暂无图片 有用 2
打赏 0
暂无图片
Mjwlan
2023-12-19
你们用的版本是正版的嘛?
手机用户5593
题主
2023-12-19
是的,我们生产用的阿里云,开发是自己的服务器加阿里云提供的polardb包,与生产环境同版本。
Mjwlan

根据描述,可能存在一些问题导致Navicat无法正确显示视图列表和访问相关视图对象。以下是一些可能的解决方法:

  1. 数据库元数据同步:尝试在Navicat中执行"刷新"或"同步"操作,以确保数据库元数据与实际数据库状态保持一致。这将帮助Navicat重新获取和更新数据库对象的信息。

  2. 检查连接权限:确保Navicat所使用的数据库连接具有足够的权限来访问和查询相关视图对象。验证连接参数,并确保对该schema下的视图具有适当的权限。

  3. 重启Navicat:尝试退出Navicat并重新启动程序,以确保任何潜在的缓存或临时状态得到清除,从而重新加载数据库对象。

  4. 检查文件系统权限:检查Navicat所连接到的数据库的数据目录是否具有正确的文件系统权限。确保Navicat可以读取和访问相关的数据文件。

  5. 检查数据库完整性:如果数据库中存在损坏或不一致的文件(如xxx和xxx.fsm),可能会导致错误。可以考虑使用PostgreSQL提供的工具(如pg_resetxlog)来修复数据库文件的完整性问题。

暂无图片 评论
暂无图片 有用 5
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
postgresql count慢,有什么解决思路?
回答 1
是因为不带条件吗?要么没用到索引。
pacemaker+pg13.10流复制查看资源状态异常
回答 1
从节点的主从配置参数是你自己手动配置的,还是pacemaker接管生成的?
pg11和 pg12有没有重大的改变吗?
回答 1
PostgreSQL12是世界上最受欢迎和功能最丰富的开源数据库的下一个主要发行版。PostgreSQL12的稳定版本计划于2019年末发布。版本12的Beta4已于2019年9月12日发布。本文将引
pg_recvlogical 做逻辑解码,如何停止
回答 1
1、直接CtrlC退出就好2、应该是1没有退出导致的3、selectfrompgstatactivitywherepid3871;
postgresql 数据源是access的mdb文件,怎么高效转换导入postgresql数据库?用c#+oledb?
回答 1
已采纳
通过Navicat的导入向导,直接就能将access的mdb导入至pg中了。
PostgreSQL 中IN的参数长度有限制吗?
回答 2
已采纳
IN后面的参数数量没有限制,但是如果IN后面的参数真的很多,那你还是梳理一下需求,看是否能以一种更合适的方式来处理该查询,否则即使没有限制,也可能会撞见一些性能问题
pg如何让wal使用直接io?
回答 2
PG15支持mac平台下写wal使用directI/O:AddsupportforwritingWALusingdirectI/OonmacOS(ThomasMunro)通过设置maxwalsende
postgreSQL 12为什么没自动清理wal日志?已经自动归档了,但是wal日志没自动删除
回答 1
已采纳
WAL文件积压大多数情况都与复制槽有关,请检查所有database下的复制槽,是否有不使用的。另外就是空闲长事务、两阶段提交事务也会引起。
哪里有测试库中表emp ,dept ,salgrade的测试数据和表结构?
回答 4
学习了
postgresql存储过程需要返回多个数据项,怎么解决?
回答 1
已采纳
REATEORREPLACEFUNCTIONabc(aNUMERIC,bNUMERIC,cNUMERIC,OUThighNUMERIC,OUTlowNUMERIC)AS$$BEGINhigh:GREA
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~