pg_dump --no-owner参数失效,pg_restore执行ALTER TABLE OWNER TO报错
PostgreSQL迁移时彻底忽略对象所有者的解决方法
问题根源
你遇到的--no-owner参数失效问题,是因为自定义格式(-Fc)备份下,仅在pg_dump阶段加参数还不够,pg_restore默认仍会尝试处理所有者相关语句;同时备份时未排除ACL(权限)语句,部分所有者变更逻辑可能藏在ACL配置里。
修正后的备份命令
备份时同时加上--no-owner和--no-acl,彻底剥离所有者与权限相关的语句:
pg_dump -Fc --no-owner --no-acl --encoding=UTF8 -h 127.0.0.1 -U postgres [[dbname]] -n [[schemaname]] > upload.bak
修正后的恢复命令
恢复阶段也必须显式添加--no-owner参数,确保pg_restore不会尝试设置原所有者:
pg_restore -h 127.0.0.1 -U [[username]] -d [[dbname]] -n [[schemaname]] --no-owner upload.bak
额外说明
- 用
postgres用户执行pg_dump是正确的,可避免权限不足导致参数不生效 - 自定义格式备份(
-Fc)的参数逻辑和文本格式不同,必须在备份和恢复两端都明确指定忽略所有者的规则
内容的提问来源于stack exchange,提问作者Rick H
相关产品推荐
相关产品推荐

