执行pg_dumpall导出PostgreSQL数据库报错如何修复
PostgreSQL导出kd库及关联对象报错修复方案
两个报错的根因
- 第一个报错
pg_dumpall: missing "=" after "kd5" in connection info stringpg_dumpall是面向整个数据库集群的导出工具,不支持通过-d参数指定单个数据库作为导出目标。传入-d kd时,程序会将kd识别为连接配置串,要求必须是key=value格式,解析失败就会抛出该错误。 - 第二个报错附带
pg_authid查询语句
这是权限不足导致的:pg_authid是存储全集群角色密码、权限属性的核心系统表,仅超级用户有权限查询。你执行命令使用的sce账号没有超级用户权限,查询该表失败时,程序会把失败的SQL语句一并打印在报错信息里,SQL本身没有问题。
正确导出操作
你需要导出kd库+关联的角色、表空间对象,不需要导出整个集群的所有库,按以下两步执行即可:
- 导出全局对象(全集群所有角色、表空间定义,这步必须使用超级用户操作,PostgreSQL默认超级用户为
postgres):pg_dumpall -U postgres -h localhost -p 5450 --globals-only > /tmp/global.sql - 导出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
相关产品推荐
相关产品推荐

