耐得住寂寞 方能一鸣惊人
在宿主机当前目录(和docker-compose.yml同一层)执行:
1 | mkdir -p ./backup |
说明:
会在./backup下生成一个文件,例如:backup-2026-03-06-153020.sql
包含所有数据库、用户、权限等(pg_dumpall全量逻辑备份)。
如你的数据库用户不是postgres,把-U postgres换成实际用户名。
同样在宿主机当前目录(和docker-compose.yml同一层)执行,例如从上面生成的文件恢复:
1 | docker exec -i postgres \ |
注意事项:
建议目标实例尽量“干净”(原有数据库/用户尽量不要冲突)。
如果提示role/database already exists,说明当前实例里已存在同名用户/库。
最简单解决办法:重建一个干净的 PG 容器再恢复;
或者手工编辑.sql文件去掉某些CREATE ROLE/CREATE DATABASE语句后再导入(需要一定经验)。
假设业务库叫mydb:
1 | mkdir -p ./backup |
如果目标实例还没有这个库,先创建:
1 | docker exec -it postgres createdb -U postgres mydb |
再导入备份:
1 | docker exec -i postgres psql -U postgres -d mydb < ./backup/mydb-2026-03-06-153020.sql |