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

pg_dump导出无root用户数据库报权限拒绝的解决方法

问题根因

你当前执行的命令没有指定连接数据库的用户,pg_dump默认会读取当前操作系统登录账号的用户名作为数据库连接用户,根本没有使用你提前创建的专用导出用户;同时报错显示你使用的连接账号连表的共享读锁权限都不具备,属于数据库权限配置缺失,和系统有没有同名数据库用户没有关系。

操作步骤

1. 指定专用用户执行导出命令

pg_dump通过-U参数指定连接使用的数据库用户,完全不依赖操作系统同名用户,只要参数指定正确,连接时校验数据库侧的账号密码即可。
带用户参数的基础导出命令格式:

pg_dump -U <你创建的专用数据库用户名> -h <数据库连接地址,本地填localhost> -p <数据库端口,默认5432> lhhsweb > lhhs.sql

举个实际例子,如果你的专用导出用户名为lhhs_backup,连接本地默认端口的库,命令为:

pg_dump -U lhhs_backup -h localhost -p 5432 lhhsweb > lhhs.sql

执行后按照提示输入该数据库用户的密码即可触发导出流程。如果需要免密执行,可以在当前系统用户的家目录创建.pgpass文件存储认证信息,文件内容格式为<数据库地址>:<端口>:<库名>:<用户名>:<密码>,将文件权限设置为600即可被pg_dump自动读取。

2. 给专用导出用户补全必要权限

你遇到的锁表权限报错是因为该账号缺少public schema下对象的读权限,需要用数据库超级管理员(默认是postgres账号)连接到lhhsweb库,依次执行以下授权语句:

  • 授予schema使用权限
GRANT USAGE ON SCHEMA public TO <你的专用数据库用户名>;
  • 授予当前public下所有表、序列的读权限(导出需要读全表数据、拿读锁)
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <你的专用数据库用户名>;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO <你的专用数据库用户名>;
  • (可选)配置默认权限,后续新建的表、序列自动给该用户授予读权限,避免下次导出再出现权限报错
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO <你的专用数据库用户名>;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO <你的专用数据库用户名>;
注意事项
  • 数据库导出必须能获取所有导出对象的ACCESS SHARE锁,权限不足时强行导出会得到残缺的备份文件,后续恢复会出现数据缺失、对象不存在等问题
  • 如果你的数据库用了非public的其他自定义schema,需要对每个schema重复上面的授权步骤,否则对应schema下的对象还是会报权限错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:57:24