无法以 'postgres' 用户身份登录到 'postgres' 数据库

Cannot login to 'postgres' database as 'postgres' user

我无法以 'postgres' 用户身份登录 'postgres' 数据库。 OS:REHL 服务器版本 6.3 PostgreSQL 版本:8.4 有一个数据库 'jiradb' 用作 JIRA 6.0.8 的后端。

当我发出指令时

[root ~]#psql postgres postgres
用户 postgres 的密码:*******
psql:致命:无法打开与 OID 2696 的关系

如何修复此错误并登录到 'postgres' 数据库。如果您需要更多详细信息,请问我。我是 postgres 数据库的新手。

谢谢。

您的 postgres 数据库已损坏。 oid 2696是系统保留的oid,所以是系统table,他们的oid是跨数据库跨版本的stable。在我的 9.4 上查找,它是:

regress=> select relname from pg_class where oid = 2696;
             relname              
----------------------------------
 pg_statistic_relid_att_inh_index
(1 row)

regress=> \d pg_statistic_relid_att_inh_index
Index "pg_catalog.pg_statistic_relid_att_inh_index"
   Column   |   Type   | Definition 
------------+----------+------------
 starelid   | oid      | starelid
 staattnum  | smallint | staattnum
 stainherit | boolean  | stainherit
unique, btree, for table "pg_catalog.pg_statistic"

所以您在系统 table pg_catalog.pg_statistic.[=26 上的索引 pg_statistic_relid_att_inh_index 的数据目录中有一个 丢失的文件 =]

这不应该发生。您的数据目录中至少有有限的数据损坏。

您的第一个动作应该是停止数据库并根据 PostgreSQL wiki - corruption.

制作整个数据目录的完整文件系统级副本

然后检查可能的原因。最近的磁盘问题? Unexpected/sudden 关闭后跟 fsck,可能在具有非崩溃安全文件系统、不安全挂载选项(例如 ext3/ext4 data=writeback)、不安全配置(如 ext[34])的系统上-on-LVM-on-md 对旧内核等有障碍。还要确保您使用的是最新的 8.4 点版本。

只有将数据目录的完整文件系统级副本复制到安全的只读存储后,才启动数据库备份(但 使用它的应用程序)并查看您是否可以连接到 jiradb 例如psql jiradb。如果可以,立即执行 jiradbpg_dump 和任何其他具有值 .

数据的数据库

不要继续使用损坏的数据目录。现在是进行转储和重新加载的好时机 - 对每个数据库执行 pg_dumpall --globals-onlypg_dump -Fc,然后将 datadir 移到一边,重新 initdb,然后重新开始备份全新安装。您甚至可能想同时升级到不太古老的 PostgreSQL。


请注意,通常可以就地解决此类问题。在这种情况下,如果您损坏的数据库不是不重要且通常为空的 postgres 数据库,您可以在禁用系统索引的单用户模式下启动 PostgreSQL,然后 REINDEX 损坏的索引.