在DBeaver中备份Laravel Sail的Docker PostgreSQL数据遇版本不匹配错误
解决Laravel Sail Docker PostgreSQL数据库备份的版本不匹配问题
你的问题根源是:DBeaver默认调用了主机上的低版本pg_dump(14.17),而Docker容器内的PostgreSQL是17.4版本。PostgreSQL要求备份工具pg_dump的版本必须与服务器版本一致或高度兼容,版本差异过大就会触发报错。
下面提供两种可靠的解决方法:
方案一:让DBeaver使用容器内的pg_dump工具
- 先获取PostgreSQL容器名称,在项目根目录执行:
./vendor/bin/sail ps
通常容器名称格式为[项目名]-postgres-1,比如你的项目叫secret,容器名就是secret-postgres-1。
- 配置DBeaver的备份工具路径:
- 右键点击你的数据库连接,选择「编辑连接」
- 切换到「PostgreSQL」标签页,找到「工具」区域
- 将
pg_dump的路径替换为Docker容器内的工具路径,格式如下:
示例(容器名为docker exec -i [容器名] /usr/bin/pg_dumpsecret-postgres-1):docker exec -i secret-postgres-1 /usr/bin/pg_dump - 保存设置后重新执行备份,此时DBeaver会调用容器内的17.4版本
pg_dump,解决版本不匹配问题。
方案二:直接用终端命令备份(更稳定)
无需依赖DBeaver,直接在主机终端执行命令即可完成备份:
方法1:使用Laravel Sail命令
在项目根目录执行:
./vendor/bin/sail pg_dump [数据库名] > [备份文件名].sql
示例(数据库名为secret):
./vendor/bin/sail pg_dump secret > dump-secret-20250430.sql
备份文件会生成在项目根目录,你可以自定义输出路径,比如./backups/dump-secret-20250430.sql。
方法2:直接使用Docker命令
如果不想通过Sail,直接执行Docker命令:
docker exec -t [容器名] pg_dump -U sail [数据库名] > [备份文件名].sql
示例(容器名为secret-postgres-1,数据库名为secret):
docker exec -t secret-postgres-1 pg_dump -U sail secret > dump-secret-20250430.sql
如果需要压缩备份文件,可结合gzip:
./vendor/bin/sail pg_dump secret | gzip > dump-secret-20250430.sql.gz
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

