You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在DBeaver中备份Laravel Sail的Docker PostgreSQL数据遇版本不匹配错误

解决Laravel Sail Docker PostgreSQL数据库备份的版本不匹配问题

你的问题根源是:DBeaver默认调用了主机上的低版本pg_dump(14.17),而Docker容器内的PostgreSQL是17.4版本。PostgreSQL要求备份工具pg_dump的版本必须与服务器版本一致或高度兼容,版本差异过大就会触发报错。

下面提供两种可靠的解决方法:

方案一:让DBeaver使用容器内的pg_dump工具

  1. 先获取PostgreSQL容器名称,在项目根目录执行:
./vendor/bin/sail ps

通常容器名称格式为[项目名]-postgres-1,比如你的项目叫secret,容器名就是secret-postgres-1。

  1. 配置DBeaver的备份工具路径:
  • 右键点击你的数据库连接,选择「编辑连接」
  • 切换到「PostgreSQL」标签页,找到「工具」区域
  • 将pg_dump的路径替换为Docker容器内的工具路径,格式如下:
    docker exec -i [容器名] /usr/bin/pg_dump
    
    示例(容器名为secret-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:19:55