PostgreSQL 16使用pg_restore指定表所有者遇权限问题求助
解决PostgreSQL 16中pg_restore导入时public schema权限问题
1. 补充schema权限授权
当前错误是因为ibrox用户没有public schema的操作权限,PostgreSQL 16默认不再自动给所有用户开放public schema权限。需要以数据库所有者(root)身份连接到目标数据库,执行以下授权语句:
-- 授予ibrox用户public schema的全部操作权限 GRANT ALL ON SCHEMA public TO ibrox; -- 设置默认权限,确保后续导入的表、序列、函数等对象自动拥有对应权限 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ibrox; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ibrox; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO ibrox;
2. 重新执行pg_restore命令
你的恢复命令参数已经符合需求(-O会忽略备份中的所有者设置,让ibrox成为导入后所有表的所有者;-x会跳过备份中的权限设置,避免权限冲突),授权完成后重新执行即可:
/usr/bin/pg_restore --disable-triggers -d template_crmpicco_1872 -h crmpiccopg.anh73jdk19.us-east-1.rds.amazonaws.com -n public -U ibrox -O -x /tmp/tmpimy39zj2/template_crmpicco_1872
关键说明
-O参数:强制导入后的所有数据库对象(表、索引等)的所有者为当前执行命令的用户(即ibrox),满足你“表所有者为ibrox”的需求。-x参数:跳过备份文件中的权限设置,避免原备份的权限覆盖你手动配置的权限。- PostgreSQL 16的权限变更:相比旧版本,16默认收紧了public schema的权限,必须显式授权才能让普通用户操作该schema下的对象。
内容的提问来源于stack exchange,提问作者crmpicco
相关产品推荐
相关产品推荐

