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

执行pg_dumpall导出PostgreSQL数据库报错如何修复

PostgreSQL导出kd库及关联对象报错修复方案

两个报错的根因

  • 第一个报错pg_dumpall: missing "=" after "kd5" in connection info string
    pg_dumpall是面向整个数据库集群的导出工具,不支持通过-d参数指定单个数据库作为导出目标。传入-d kd时,程序会将kd识别为连接配置串,要求必须是key=value格式,解析失败就会抛出该错误。
  • 第二个报错附带pg_authid查询语句
    这是权限不足导致的:pg_authid是存储全集群角色密码、权限属性的核心系统表,仅超级用户有权限查询。你执行命令使用的sce账号没有超级用户权限,查询该表失败时,程序会把失败的SQL语句一并打印在报错信息里,SQL本身没有问题。

正确导出操作

你需要导出kd库+关联的角色、表空间对象,不需要导出整个集群的所有库,按以下两步执行即可:

  1. 导出全局对象(全集群所有角色、表空间定义,这步必须使用超级用户操作,PostgreSQL默认超级用户为postgres):
    pg_dumpall -U postgres -h localhost -p 5450 --globals-only > /tmp/global.sql
    
  2. 导出kd数据库的全量内容(包含表、数据、索引、权限等所有库内对象),如果sce账号是kd库的所有者可以直接用该账号,权限不足就换postgres账号执行:
    pg_dump -U postgres -h localhost -p 5450 -d kd > /tmp/kd_db.sql
    

后续恢复时,先执行/tmp/global.sql导入角色和表空间定义,再执行/tmp/kd_db.sql导入kd库数据即可,所有关联对象都能完整保留。

如果你确实需要导出整个集群的所有数据库,直接用超级用户执行不带-d参数的pg_dumpall命令即可:

pg_dumpall -U postgres -h localhost -p 5450 > /tmp/full_cluster.sql

注意事项

如果不知道postgres账号的密码,可以临时修改数据目录下的pg_hba.conf文件,将本地连接的认证方式改为trust,执行pg_ctl reload重载配置后完成导出,再把配置改回原值重载即可,不需要重启数据库。


内容的提问来源于stack exchange,提问作者mourad semi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:24:18