使用pg_dump备份Docker部署的PostgreSQL:无需pgAdmin能否通过IntelliJ实现?
方案1:无需安装pgAdmin的Docker版PostgreSQL备份方法(Ubuntu环境)
不需要额外安装重型管理工具,直接通过Docker自带命令即可完成备份,操作如下:
- 首先查询运行中的PostgreSQL容器ID或名称:
记录返回结果中第一列的容器ID,或者最后一列的容器名称,下文统一用docker ps | grep postgres<PG容器标识>指代。 - 执行全量备份,将备份文件直接导出到Ubuntu宿主机本地:
示例:如果容器名是docker exec -t -e PGPASSWORD=<你的数据库密码> <PG容器标识> pg_dump -U <数据库用户名> <目标数据库名> > /本地保存路径/备份文件名.sqlmy_postgres,用户名是postgres,要备份的库是business_db,备份文件保存到用户主目录的backup文件夹,命令为:docker exec -t -e PGPASSWORD=123456 my_postgres pg_dump -U postgres business_db > ~/backup/20240520_business_backup.sql - 如果需要压缩备份文件减少存储空间,直接在命令中加入gzip管道:
docker exec -t -e PGPASSWORD=123456 my_postgres pg_dump -U postgres business_db | gzip > ~/backup/20240520_business_backup.sql.gz - 如需恢复备份,执行以下命令即可:
# 普通sql文件恢复 cat ~/backup/20240520_business_backup.sql | docker exec -i <PG容器标识> psql -U <数据库用户名> -d <目标数据库名> # 压缩备份文件恢复 gunzip -c ~/backup/20240520_business_backup.sql.gz | docker exec -i <PG容器标识> psql -U <数据库用户名> -d <目标数据库名>
方案2:通过IntelliJ系列IDE完成备份操作
操作前需保证你已经在IDE的Database工具窗口中正确配置了PostgreSQL数据库连接,且可以正常访问目标库,操作步骤如下:
- 调出Database工具窗口:顶部菜单栏选择
View > Tool Windows > Database即可显示 - 在Database面板中找到目标PostgreSQL连接,展开后右键点击你需要备份的具体数据库名称(不要点击连接根节点,否则会导致导出失败)
- 在右键菜单中选择
Export with 'pg_dump'选项 - 解决最常见的配置错误:
多数人操作失败是因为IDE未匹配到正确的pg_dump路径,你可以先在Ubuntu上安装轻量的PostgreSQL客户端(仅几MB,远小于pgAdmin):
安装完成后在导出配置窗口的sudo apt update && sudo apt install -y postgresql-clientPath to pg_dump项填入/usr/bin/pg_dump即可 - 按需配置导出参数:选择备份文件保存路径,设置是否导出表结构、数据、是否包含DROP语句等,编码选择UTF-8
- 点击
Run即可完成备份,文件会保存到你指定的路径
IntelliJ备份常见失败原因排查
- pg_dump大版本和Docker容器中PostgreSQL大版本不一致:比如本地客户端是14版本,容器内PG是15版本,会触发版本不兼容错误,可安装对应大版本的postgresql-client,或直接使用方案1的Docker命令备份无兼容问题
- 连接数据库的用户权限不足:检查配置连接时使用的用户是否拥有目标库的全量SELECT权限
- 端口映射配置错误:如果Docker容器未将PG端口映射到宿主机,IDE无法直接访问,需先在容器启动参数中添加
-p 5432:5432端口映射
内容的提问来源于stack exchange,提问作者Jakub Kołacz
相关产品推荐
相关产品推荐

