解决pg_dump报错:ERROR: permission denied for schema topology
问题解决步骤
1. 让postgres用户可见topology schema
postgres用户当前无法识别topology schema,是因为缺少该schema的USAGE权限。先通过有权限的some_user登录数据库,给postgres授权:
psql -h localhost -p 5432 -U some_user -d my_db
执行SQL查询schema详情并授权:
-- 查看topology schema的所有者与权限配置 SELECT n.nspname, u.usename AS owner, array_to_string(n.nspacl, ', ') AS privileges FROM pg_namespace n JOIN pg_user u ON n.nspowner = u.usesysid WHERE n.nspname = 'topology'; -- 给postgres用户授予schema的USAGE权限 GRANT USAGE ON SCHEMA topology TO postgres;
退出psql后,用postgres用户登录执行\dn,此时应该能看到topology schema。
2. 给some_user配置备份所需权限
pg_dump需要对目标表持有ACCESS SHARE锁(该权限隐含在SELECT权限中),所以需确保some_user拥有topology schema及下属表的访问权限:
用postgres用户登录数据库后执行:
-- 授予schema的USAGE与创建权限 GRANT USAGE, CREATE ON SCHEMA topology TO some_user; -- 授予schema下所有现有表的SELECT权限 GRANT SELECT ON ALL TABLES IN SCHEMA topology TO some_user; -- 配置默认权限,确保未来在该schema创建的表也能被some_user访问 ALTER DEFAULT PRIVILEGES IN SCHEMA topology GRANT SELECT ON TABLES TO some_user;
3. 验证备份命令
重新执行备份命令,确认正常运行:
pg_dump -h localhost -p 5432 -U some_user -d my_db | gzip > /tmp/my_db.dump.gz
内容的提问来源于stack exchange,提问作者Kevin Waterson
相关产品推荐
相关产品推荐

