pg_restore恢复PostgreSQL时aws_s3扩展因依赖顺序错误创建失败
PostgreSQL恢复时aws_s3扩展创建失败的解决方法
核心问题
aws_s3扩展依赖plpgsql,但备份文件的恢复顺序中,plpgsql的创建语句在aws_s3之后,导致依赖缺失报错。
具体解决方法
1. 预创建plpgsql扩展(最简单)
在执行pg_restore之前,先连接到目标数据库,手动执行:
CREATE EXTENSION IF NOT EXISTS plpgsql;
plpgsql是PostgreSQL常用的过程语言,提前创建后再恢复,就能避开依赖顺序问题,全程不需要修改备份文件或恢复参数。
2. 用--use-list调整恢复顺序(官方推荐)
如果不想手动预创建,完全可以通过--use-list选项自定义恢复顺序,且不会排除任何内容:
- 第一步,从备份文件导出默认恢复列表:
pg_restore -l your_backup.dump > restore_order.txt
- 第二步,编辑
restore_order.txt,找到CREATE EXTENSION plpgsql的行,将其剪切粘贴到CREATE EXTENSION aws_s3的行前面,保存文件。 - 第三步,用调整后的列表执行恢复:
pg_restore -L restore_order.txt -d your_target_db your_backup.dump
3. 直接编辑文本格式备份(仅适用于纯文本dump)
如果你的备份是纯SQL文本格式(不是pg_dump默认的自定义格式),可以直接打开备份文件,把CREATE EXTENSION plpgsql;语句移到CREATE EXTENSION aws_s3;之前。但自定义格式的备份无法直接编辑,所以这个方法通用性较差。
内容的提问来源于stack exchange,提问作者Vasileios Giannakidis
相关产品推荐
相关产品推荐

