我最近在我们的 Postgres 数据库中遇到了一个问题,当我查询:从 myTable 中选择 * 时,结果是“无法打开与 OID 892600370 的关系”。而且它的前端应用程序不能再正常运行了。根据我的研究,我确定了有错误的列,但我想准确定位该列的行 OID,以便我可以修改它。请帮忙。
先感谢您。
我最近在我们的 Postgres 数据库中遇到了一个问题,当我查询:从 myTable 中选择 * 时,结果是“无法打开与 OID 892600370 的关系”。而且它的前端应用程序不能再正常运行了。根据我的研究,我确定了有错误的列,但我想准确定位该列的行 OID,以便我可以修改它。请帮忙。
先感谢您。
你有一个损坏的数据库。可能是一个错误,但更可能是坏硬件。如果您有最近的备份,请使用它。我猜你不会。
确保找到数据库或其文件树的任何备份并确保它们安全。
停止 PostgreSQL 服务器并对整个数据库树(基本、全局、pg_xlog -该级别的所有内容)进行文件备份。现在可以安全地开始摆弄了...
现在,再次启动数据库服务器并一次转储一个表。如果表不会转储,请尝试删除任何索引和外键约束,然后再试一次。
对于不会转储的表,它可能只是某些行。使用 删除任何索引并转储一系列行COPY ... SELECT
。这应该可以让您缩小任何损坏的行并获得其余的。
现在你有一个大部分恢复的数据库,在另一台机器上恢复它,并采取任何必要的步骤来确定损坏/丢失的内容以及需要做的事情。
在旧机器上运行全套测试,看看是否需要更换。考虑您的监控是否需要改进。
然后 - 确保下次保留正确的备份,这样您就不必做所有这些,您只需使用它们。
无法打开与 OID 892600370 的关系
关系是表或索引。关系的 OIDpg_class
是定义该关系的行的 OID。
尝试select relname from pg_class where oid=892600370;
通常从这种关系是什么很明显relname
,否则你想看看 pg_class: relnamespace
, relkind
,...中的其他字段