You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL执行\d/\d+及查询pg_roles报错,如何解决?

解决PostgreSQL 16中pg_catalog.pg_roles不存在的错误

可能原因

pg_catalog.pg_roles是PostgreSQL核心系统表,出现不存在的错误通常是系统目录损坏、数据库集群初始化不完整或安装文件损坏导致的。以下是具体解决步骤:

解决步骤

1. 确认当前连接的数据库

先检查是否连接到了正确的系统数据库:

postgres=# \c

输出应显示You are now connected to database "postgres" as user "xxx".,如果连接的不是postgres库,执行\c postgres切换后再尝试查询pg_catalog.pg_roles。

2. 尝试重建系统索引

如果数据库连接正确,先尝试重建系统表索引:

  1. 停止PostgreSQL服务:

    • 打开Windows服务管理器(按下Win+R输入services.msc),找到PostgreSQL 16服务,右键选择停止;
    • 或使用管理员权限命令行:
      net stop postgresql-x64-16
      
      (服务名称可能因安装版本略有不同,以实际为准)
  2. 以单用户模式启动PostgreSQL:
    打开管理员命令提示符,切换到PostgreSQL的bin目录(示例路径):

    cd "C:\Program Files\PostgreSQL\16\bin"
    

    执行单用户启动命令(替换为你的实际数据目录):

    postgres --single -D "C:\Program Files\PostgreSQL\16\data" postgres
    
  3. 在单用户模式下重建索引:
    输入以下SQL命令并回车:

    REINDEX SYSTEM pg_roles;
    

    执行完成后,输入\q退出单用户模式,重新启动PostgreSQL服务,再次尝试查询或使用\d命令。

3. 备份并重新初始化数据库集群

如果重建索引无效,需要重新初始化数据库集群(注意:此操作会清空现有数据,请先备份!):

  1. 备份所有数据:
    在bin目录执行备份命令(替换备份路径):

    pg_dumpall -U postgres -f "C:\pg_backup\full_backup.sql"
    

    输入postgres用户密码完成备份。

  2. 停止PostgreSQL服务(同步骤2)。

  3. 重新初始化数据库:
    在bin目录执行:

    initdb -D "C:\Program Files\PostgreSQL\16\data" -U postgres -W
    

    按照提示输入postgres用户的新密码,完成初始化。

  4. 启动PostgreSQL服务:

    net start postgresql-x64-16
    
  5. 恢复备份数据:

    psql -U postgres -d postgres -f "C:\pg_backup\full_backup.sql"
    

    输入密码后等待恢复完成,再验证\d命令和pg_catalog.pg_roles查询。

4. 重新安装PostgreSQL

如果上述步骤都无效,说明安装文件可能损坏:

  1. 卸载PostgreSQL,删除安装目录(如C:\Program Files\PostgreSQL\16)和数据目录;
  2. 清理系统注册表(可选但推荐:按下Win+R输入regedit,删除HKEY_LOCAL_MACHINE\SOFTWARE\PostgreSQL项);
  3. 从PostgreSQL官方下载最新的16.x版本安装包,重新完成安装。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:03:36