错误:无法读取关系库/Y/Z 的块 X

5 postgresql postgresql-8.4

我们的 PostgreSQL 服务器(版本 8.4)存在一些严重问题。我们的 Web 应用程序使用 jdbc 连接到 PostgreSQL 服务器。突然我们的 Web 应用程序无法连接到 PostgreSQL 服务器。我们得到 PSQLException:管道损坏。因此,我尝试通过 pg_admin 连接。这有效,但我收到这样的错误:

错误:无法读取关系库/16390/2663 的块 32570:仅读取 8192 字节中的 0 个

我尝试进行转储来备份数据,但这也不起作用:(查看侧面底部的编辑)

pg_dump:SQL 命令失败

pg_dump:来自服务器的错误消息:错误:无法读取关系库/16390/2663 的块 32570:只读 8192 字节中的 0

pg_dump:命令是:在访问共享模式下锁定表 public.results_233_top100_disease_state_karyotype

我试图获取一些信息

SELECT oid, relname FROM pg_class WHERE oid=2663
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

第2663章 “pg_class_relname_nsp_index”

在我收集一些信息的过程中,我读到,重新创建该特定索引可能会有所帮助。因此使用以下命令重新索引它:

REINDEX INDEX pg_class_relname_nsp_index
Run Code Online (Sandbox Code Playgroud)

这根本没有帮助,现在我很无助。有人知道我能做什么吗?另一点是,我们每周进行备份。是否可以/var/lib/postgresql/8.4./main使用备份中的数据覆盖数据文件夹?

编辑:我通过重新索引有错误的表解决了问题。现在我又收到另一个错误:

pg_dump:SQL 命令失败
pg_dump:来自服务器的错误消息:错误:关系 base/16390/16398 的块 1047 中的页头无效
pg_dump:命令是:COPY public.data_1 (sampleid, feature, value) TO stdout;

Cra*_*ger 4

在做任何其他事情之前,请阅读并采取行动:http://wiki.postgresql.org/wiki/Corruption

您很可能遇到磁盘或文件系统问题。

如果您怀疑由于任何原因出现任何类型的数据库损坏,您应该在尝试任何恢复之前停止数据库并在文件系统级别复制整个数据库

完成此操作后,您就可以研究可能的修复方案。您可能会丢失一些重要的数据,因此您的目标应该是让它正常工作,以便您可以pg_dump损坏数据库、重新初始化数据库并重新加载。

如果您有最近的备份,那么现在是考虑使用它的好时机。