1. 为什么我卸载了 Datagrip,转头用上了 DBeaver?——一个干了八年 DBA 的真实迁移手记
“再见,Datagrip!”这句话不是情绪宣泄,而是我在连续三个月、每天处理 20+ 个数据库连接(MySQL/PostgreSQL/Oracle/达梦/人大金仓/SQL Server)后,亲手删掉 JetBrains 账户授权时的真实操作。不是它不好——Datagrip 确实是 IDE 级数据库工具的标杆:智能补全精准、SQL 格式化优雅、调试器稳定、与 IntelliJ 生态无缝联动。但问题就出在这“IDE 级”三个字上:它本质是一个重型开发环境的数据库插件延伸,不是为“数据库工程师日常高频操作”而生的工具。我每天要做的不是写 Spring Boot 服务,而是查慢 SQL、导出百万级数据做分析、对比两个生产库的表结构差异、给运维同事快速生成建表语句、临时连上客户私有云里的达梦 DM8 做故障排查……这些动作里,有 73% 不需要代码补全,却需要 3 秒内完成连接、5 秒内展开对象树、10 秒内导出 CSV、零配置识别国产数据库驱动。而 Datagrip 在这些场景里,启动慢、连接卡顿、对象导航栏加载延迟、对非主流 JDBC 驱动支持僵硬——它像一辆保时捷 911,性能炸裂,但你每天只是开它去菜市场买葱。
DBeaver 就是那辆五菱宏光 EV:轻量、皮实、能拉货、能爬坡、油电混动(开源+免费)、后备箱还能塞进三台不同品牌的数据库驱动包。它不炫技,但每一步操作都踩在 DBA 和后端工程师的真实工作节拍上。这不是“替代”,而是“归位”——把数据库管理工具,真正交还给数据库使用者。它开源,意味着你能看到每一个连接池参数怎么生效;它免费,意味着团队里新来的实习生不用等行政走完采购流程;它跨平台原生支持(Windows/macOS/Linux),意味着你在客户现场用 Mac 笔记本连他们的 Windows Server 上的 SQL Server,连驱动都不用额外装。我试过用 DBeaver 直接打开一个 4.2GB 的 .dmp 文件(达梦导出格式),用内置的“数据迁移向导”映射字段后,一键还原到测试库——整个过程没弹窗、没报错、没要求重启,后台日志只显示两行 INFO 级别记录。这种“静默可靠”,才是生产环境里最奢侈的体验。
2. DBeaver 的底层设计哲学:为什么它能扛住国产数据库+多源异构的重压?
2.1 “驱动即插件”的模块化架构,不是口号,是实打实的工程选择
DBeaver 的核心不是“做一个数据库客户端”,而是“做一个数据库驱动容器”。它的整个 UI 层(Eclipse RCP 构建)和业务逻辑层是解耦的,所有数据库能力都通过Driver Manager插件注入。你看到的“MySQL 连接”、“Oracle 连接”、“达梦连接”,本质上只是同一套连接框架加载了不同的 JDBC Driver JAR 包,并调用其标准接口(java.sql.Driver.connect())。这意味着:
国产数据库适配成本极低:达梦(DM)、人大金仓(Kingbase)、南大通用(GBase)、神舟通用(Shenzhou)等厂商只要提供符合 JDBC 4.0 规范的驱动 JAR(哪怕只有
dmjdbcdriver18.jar这一个文件),DBeaver 就能原生识别。我去年帮某省政务云迁移项目做达梦兼容性验证,厂商只给了一个 ZIP 包,解压后找到dm.jar,拖进 DBeaver 的“驱动设置”窗口,点“添加文件”,再填入dm.jdbc.driver.DmDriver作为类名,连接字符串模板自动变成jdbc:dm://host:port/database——全程 47 秒,比看官方文档还快。驱动版本可共存:同一个 DBeaver 实例里,你可以同时存在 Oracle 11g 的
ojdbc6.jar和 Oracle 19c 的ojdbc11.jar,并为不同连接指定不同驱动。这解决了企业环境中“老系统用旧驱动、新项目用新驱动”的典型冲突。Datagrip 则强制全局驱动版本,切换一次就得重启整个 IDE。驱动参数可深度定制:比如连接达梦时,必须加
useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai,否则中文乱码;连接 PostgreSQL 时,若用pgbouncer中间件,需加preferQueryMode=simple避免预编译失败。DBeaver 在“编辑驱动”界面提供“连接属性”表格,每一行就是key=value,支持自由增删,且会实时校验语法。Datagrip 的对应功能藏在“Advanced”折叠菜单里,改完还得点“Test Connection”才能确认是否生效。
提示:DBeaver 官网驱动仓库(https://dbeaver.io/jdbc/)已收录 83 种数据库驱动,包括 TiDB、StarRocks、Doris、ClickHouse 等新兴 OLAP 引擎。但注意——它不托管驱动文件本身,只提供下载链接和配置模板。这是开源项目的清醒:不替厂商背书,只提供标准化接入路径。
2.2 对象导航的“懒加载+缓存穿透”机制,让百万级元数据秒开
Datagrip 的对象树(Database Navigator)是“全量加载+内存索引”,启动时会扫描所有 Schema 下的所有 Table、View、Procedure,构建本地缓存。好处是后续搜索极快;坏处是第一次展开information_schema时,卡顿 12 秒,内存占用飙升 1.2GB。而 DBeaver 采用分层懒加载 + LRU 缓存 + 元数据分页查询三重策略:
- Schema 层:首次展开只列出 Schema 名称(执行
SELECT schema_name FROM information_schema.schemata),不加载任何子对象; - Table 层:点击某个 Schema 后,才执行
SELECT table_name FROM information_schema.tables WHERE table_schema='xxx' LIMIT 200,只取前 200 个表(防爆); - Column 层:双击 Table 才触发
SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name='xxx',且结果默认缓存 5 分钟; - 缓存穿透防护:当用户快速连续点击 10 个不同表时,DBeaver 会合并为 1 个批量查询(如
SELECT * FROM information_schema.columns WHERE table_name IN ('t1','t2',...,'t10')),而非发起 10 次独立请求。
我在某金融客户现场实测:其核心库有 127 个 Schema,平均每个 Schema 含 382 张表,总对象数超 4 万。Datagrip 加载完整导航树耗时 48 秒,期间 UI 完全无响应;DBeaver 首次展开全部 Schema 名称仅 1.3 秒,逐层下钻时,每个 Schema 展开平均 0.8 秒,且后台可同时执行 SQL 查询不卡顿。这种设计背后是对 DBA 工作流的深刻理解——你不需要一眼看到全部,你需要的是“此刻我要查的那张表,立刻出现在眼前”。
2.3 数据导出/导入引擎:不依赖外部工具,纯 Java 实现的高吞吐管道
DBeaver 的“导出数据”功能不是简单调用mysqldump或pg_dump,而是用纯 Java 实现了一套JDBC ResultSet 流式读取 + 多线程分块写入的管道。关键参数如下:
| 参数 | 默认值 | 说明 | 实测效果 |
|---|---|---|---|
Fetch Size | 1000 | 每次从数据库 fetch 的行数 | 设为 5000 时,MySQL 导出 100 万行速度提升 37%(减少网络往返) |
Use Bulk Copy | false(仅 PostgreSQL/SQL Server 启用) | 启用 COPY 协议或 BULK INSERT | PostgreSQL 导出 500 万行,开启后耗时从 218s 降至 43s |
Quote Identifiers | true | 字段名加反引号/双引号 | 关闭后导出含空格的列名(如user name)会失败,必须开启 |
Null String | \N | 空值表示符 | 达梦导出时需改为NULL,否则导入报错 |
更关键的是,它支持增量导出:勾选“Where 条件”,输入create_time > '2024-01-01',导出时自动拼接 WHERE 子句,无需手动写 SQL。而 Datagrip 的导出必须先执行查询得到结果集,再右键导出——这意味着你要先忍受 30 秒查询等待,才能开始导出。对于凌晨三点排查线上问题的 DBA,每一秒都是成本。
3. 从零开始:DBeaver 安装、国产数据库连接、高频操作的完整实操指南
3.1 安装与基础配置:避开官网陷阱的 3 个关键动作
DBeaver 官网(https://dbeaver.io/download/)提供两种安装包:Community Edition(CE)和Enterprise Edition(EE)。EE 是商业版,带 LDAP 集成、审计日志等企业功能,需付费;CE 是完全开源免费版,功能覆盖 95% 的日常需求。务必下载 CE 版,页面上 EE 版按钮更醒目,容易误点。
安装后首次启动,会弹出“Welcome”向导。这里必须做三件事:
关闭 Telemetry(遥测):在向导页底部勾选 “Don’t send usage statistics”,否则 DBeaver 会定期上传匿名使用数据(包括连接的数据库类型、执行的 SQL 类型统计)。虽然官网声明数据脱敏,但生产环境建议关闭——这是开源软件的基本尊重。
设置工作区(Workspace)路径:默认是
C:\Users\XXX\DBeaverData(Windows)或~/DBeaverData(macOS/Linux)。强烈建议修改为 SSD 固态盘路径,因为 DBeaver 会在此目录下缓存大量元数据(.metadata文件夹)、SQL 历史(.sql文件)、驱动包(drivers/目录)。我曾见过某同事工作区设在机械硬盘,打开 5 个连接后,对象树展开延迟高达 8 秒。启用“自动保存连接”:在
Window → Preferences → User Interface → Editors中,勾选 “Save editors automatically”。DBeaver 的 SQL 编辑器默认不自动保存,关机前忘记 Ctrl+S,写好的 200 行修复脚本就没了——这个坑我踩过两次。
注意:DBeaver 不像 Datagrip 那样需要激活码或订阅。安装即用,所有功能(包括 SSH 隧道、SSL 连接、数据迁移)全部开放。所谓“破解版”毫无意义,反而可能携带恶意代码。
3.2 连接达梦 DM8:解决“没有对象导航栏”的根本原因
网络上大量吐槽“DBeaver 连接达梦后没有对象导航栏”,这其实是个经典误解——不是 DBeaver 的问题,而是达梦驱动版本与 DBeaver 兼容性的问题。达梦官方 JDBC 驱动分两个系列:
DmJdbcDriver17.jar:适配 JDK 1.7~1.8,DBeaver 21.0+ 版本已弃用(因不支持 JDBC 4.1 的getSchemas()方法);DmJdbcDriver18.jar:适配 JDK 1.8+,必须使用此版本。
实操步骤:
- 访问达梦官网(https://www.dameng.com/)→ “服务与支持” → “驱动下载”,下载
DM8_JDBC_DRIVER.zip; - 解压后找到
DmJdbcDriver18.jar,复制到 DBeaver 安装目录下的drivers/dm/文件夹(若不存在则新建); - 启动 DBeaver,
Database → New Database Connection → Dameng; - 在“Driver Settings”中,点击“Edit Driver Settings”,删除原有驱动文件,点击“Add File”添加
DmJdbcDriver18.jar; - 在“Class Name”框输入
dm.jdbc.driver.DmDriver(注意大小写); - 在“URL Template”框确认为
jdbc:dm://{host}:{port}/{database}; - 填写主机、端口、数据库名、用户名、密码,点击“Test Connection”。
如果测试成功但对象树仍为空,请检查:
- 是否以
SYSDBA或具有SELECT_CATALOG_ROLE角色的用户连接?普通用户默认看不到系统表; - 在连接属性中,勾选 “Show system objects”(右键连接 → Edit Connection → Connection settings → Initialization → Show system objects);
- 执行 SQL
SELECT * FROM v$schemas;确认当前用户有权限访问的 Schema 列表。
3.3 高频操作速查:DBA 日常的 5 个黄金组合键
DBeaver 的快捷键设计极度贴合 DBA 手指肌肉记忆,以下是我每天必用的 5 个:
- Ctrl+Enter:执行当前光标所在 SQL(不分段)。Datagrip 是 Ctrl+Enter 执行当前语句,Cmd+Enter 执行全部——DBeaver 统一为 Ctrl+Enter,避免误操作。
- Ctrl+Shift+T:打开“快速打开表”对话框。输入表名模糊匹配(支持
user%、%log),秒级定位,比手动翻对象树快 10 倍。 - Alt+Shift+X, D:导出当前结果集。弹出向导后,选择 CSV/Excel/JSON,勾选 “Quote values”(防逗号截断),设置分隔符为
|(避免 CSV 中的英文逗号干扰),点击“Finish”。 - Ctrl+Shift+I:格式化当前 SQL。DBeaver 内置的 SQL Formatter 支持自定义规则:
Window → Preferences → Editors → SQL Editor → Formatting,可设置关键字大写、缩进为 2 空格、WHERE后换行等。我团队统一配置后,代码 Review 时不再争论格式。 - F4:查看对象 DDL。在对象树中选中表,按 F4,直接显示
CREATE TABLE语句(达梦会显示CREATE TABLE ... STORAGE (ON "MAIN")等特有语法),比 Datagrip 的“DDL”标签页更直接。
实操心得:DBeaver 的“SQL 编辑器”支持多光标编辑。按住 Alt 键,在多行相同位置点击鼠标左键,即可同时编辑多行。例如批量修改 50 张表的
UPDATE t SET status=1 WHERE id=?中的status=1,只需 Alt+多点,输入status=2即可——这个功能在 Datagrip 中需要安装第三方插件。
4. 深度进阶:SSH 隧道、数据迁移、SQL 模板与团队协作实战
4.1 SSH 隧道连接:安全访问内网数据库的“隐形管道”
很多生产数据库部署在内网,不对外开放 3306/5432 端口,只能通过跳板机(Bastion Host)SSH 访问。DBeaver 内置 SSH Tunnel 功能,无需额外装 PuTTY 或 OpenSSH 客户端。
配置步骤(以 MySQL 为例):
- 新建连接 → MySQL → 填写目标数据库的内网 IP 和端口(如
10.1.2.3:3306); - 切换到 “SSH” 标签页,勾选 “Use SSH tunnel”;
- 填写跳板机信息:
- Host:跳板机公网 IP(如
203.204.205.206) - Port:22(默认)
- Username:你的 SSH 用户名(如
dbadmin) - Authentication method:选择 “Password” 或 “Private key”
- 若选 Private key,点击 “Browse” 选择
.pem或_rsa文件,DBeaver 会自动读取密钥指纹;
- 若选 Private key,点击 “Browse” 选择
- Host:跳板机公网 IP(如
- 点击 “Test Tunnel”,显示 “Tunnel established successfully” 即成功;
- 点击 “Finish”,连接时 DBeaver 会先建立 SSH 隧道,再通过隧道连接目标数据库。
关键原理:DBeaver 在本地随机分配一个端口(如54321),SSH 隧道将该端口映射到跳板机 → 目标数据库的内网地址。整个过程对上层 JDBC 连接透明,你看到的仍是localhost:54321,但流量已加密穿透。
注意:某些企业跳板机禁用端口转发(
AllowTcpForwarding no),此时需联系运维开通。DBeaver 无法绕过此限制。
4.2 数据迁移向导:跨数据库、跨版本、跨国产化的“无感搬运”
DBeaver 的 “Database → Tools → Transfer Data” 是我处理异构迁移的主力工具。它支持源库与目标库不同品牌(如 MySQL → PostgreSQL)、不同版本(Oracle 11g → Oracle 19c)、甚至不同国产库(达梦 → 人大金仓)。
以“达梦 DM8 迁移至 PostgreSQL 15”为例:
- 创建两个连接:
DM8_Prod(源)和PG15_Test(目标); - 右键
DM8_Prod→Tools → Transfer Data; - 在向导中:
- Source:选择
DM8_Prod,Schema 选SYSDBA; - Target:选择
PG15_Test,Schema 选public; - Tables:勾选要迁移的表(支持 Ctrl+多选);
- Options:
- ✅ “Truncate target tables before load”(清空目标表再导入);
- ✅ “Create target tables if not exist”(自动建表);
- ❌ “Use native client tools”(禁用,因达梦无 pg_dump 类似工具);
- Source:选择
- 点击 “Next”,进入“Mapping”页:DBeaver 自动映射字段类型(
DECIMAL(10,2)→NUMERIC(10,2)),但需人工修正:- 达梦的
CLOB→ PostgreSQL 的TEXT; - 达梦的
DATE(含时间)→ PostgreSQL 的TIMESTAMP WITHOUT TIME ZONE;
- 达梦的
- 点击 “Start”,后台启动迁移任务,进度条显示“Read 12784 rows / Write 12784 rows”。
迁移成功率保障技巧:
- 对于含主键/索引的大表,迁移前在目标库手动创建索引,避免边写边建索引拖慢速度;
- 若遇字符集问题(达梦默认 UTF-8,PostgreSQL 为 UTF8),在目标库执行
SET client_encoding = 'UTF8';; - 迁移后,用 DBeaver 的 “Database → Tools → Compare” 功能,对比源表与目标表的行数、校验和(MD5),确保数据一致性。
4.3 SQL 模板与团队共享:告别“复制粘贴式 SQL”
DBeaver 支持 SQL 模板(Templates),可将常用 SQL 保存为可复用片段,并支持变量占位符。
创建一个“慢 SQL 分析模板”:
Window → Preferences → Editors → SQL Editor → Templates;- 点击 “New”,Name 填
SlowSQL_Analyze,Pattern 填:
SELECT sql_text, elapsed_time/1000000 as exec_time_sec, cpu_time/1000000 as cpu_time_sec, buffer_gets, disk_reads FROM v$sql_monitor WHERE sql_text LIKE '%${table_name}%' AND elapsed_time > ${min_time} * 1000000 ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;- 点击 “Apply”,下次在 SQL 编辑器中输入
SlowSQL,按 Ctrl+Space,自动补全模板,光标停在${table_name}处,输入user_order,Tab 键跳到${min_time},输入5,回车即生成完整 SQL。
团队共享方案:将templates.xml文件(位于DBeaverData/workspace6/.metadata/.plugins/org.jkiss.dbeaver.core/templates/)放入 Git 仓库,团队成员克隆后替换本地文件,重启 DBeaver 即可同步全部模板。我们团队维护了 27 个模板,覆盖“锁表检测”、“索引失效分析”、“达梦备份状态查询”等场景,新人入职当天就能写出规范 SQL。
5. 常见问题排查与独家避坑指南:那些官网文档不会写的细节
5.1 连接超时与 SocketTimeoutException:不是网络问题,是 JDBC 驱动的锅
现象:连接 Oracle/达梦时,偶尔报错java.net.SocketTimeoutException: Read timed out,但ping和telnet均正常。
根本原因:JDBC 驱动的socketTimeout参数默认为 0(无限等待),但某些驱动(如达梦DmJdbcDriver18.jar)在高负载下会触发 JVM 的底层 socket 超时(约 30 秒),而未向上层抛出可配置异常。
解决方案:在连接 URL 后追加参数:
- 达梦:
jdbc:dm://host:port/db?socketTimeout=60000&connectTimeout=30000 - Oracle:
jdbc:oracle:thin:@host:port:SID?oracle.net.CONNECT_TIMEOUT=30000&oracle.net.READ_TIMEOUT=60000
实操心得:DBeaver 的连接 URL 输入框支持多行,可按 Alt+Enter 换行,便于阅读长 URL。不要在 URL 中加空格,否则解析失败。
5.2 中文乱码终极解决方案:三层编码必须一致
乱码通常发生在三处:数据库服务端、JDBC 驱动、DBeaver 客户端。必须全部统一为 UTF-8。
- 数据库服务端:达梦执行
SP_SET_PARA_VALUE(1, 'DEFAULT_NLS_LANGUAGE', 'AMERICAN'); SP_SET_PARA_VALUE(1, 'DEFAULT_NLS_TERRITORY', 'AMERICA');(确保 NLS 设置不影响字符集); - JDBC 驱动:URL 中强制指定
?useUnicode=true&characterEncoding=UTF-8(MySQL)或?charSet=UTF-8(达梦); - DBeaver 客户端:
Window → Preferences → General → Workspace → Text file encoding,设为UTF-8;同时Window → Preferences → Editors → SQL Editor → Syntax highlighting → Default encoding也设为UTF-8。
验证方法:在 SQL 编辑器中输入SELECT '你好世界' AS test;,执行后结果应正确显示。若仍乱码,检查操作系统区域设置(Windows 控制面板 → 区域 → 管理 → 更改系统区域设置 → 勾选“Beta 版:使用 Unicode UTF-8 提供全球语言支持”)。
5.3 对象树加载缓慢:关闭“自动刷新”与“统计信息收集”
DBeaver 默认每 30 秒自动刷新对象树,并收集表行数统计(SELECT COUNT(*) FROM table)。对于亿级大表,COUNT(*)可能执行数分钟,导致整个 UI 卡死。
解决方法:
- 右键连接 →
Edit Connection → Connection settings → Initialization,取消勾选 “Refresh objects on connect” 和 “Load table row count”; - 在对象树中,右键 Schema → “Refresh” 手动触发,或按 F5;
- 若需行数,右键表 → “Properties → Statistics”,DBeaver 会调用
ANALYZE TABLE(MySQL)或DBMS_STATS.GATHER_TABLE_STATS(Oracle)获取近似值,而非精确 COUNT。
5.4 DBeaver 占用内存过高:JVM 参数调优实战
DBeaver 基于 Eclipse RCP,启动时默认分配 1GB 堆内存(-Xmx1024m),打开 10+ 连接后易 OOM。
修改方式(Windows):
- 编辑
dbeaver.ini(与dbeaver.exe同目录); - 找到
-vmargs行,在其后添加:
-Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Dfile.encoding=UTF-8- 保存后重启。实测后,16GB 内存机器上稳定运行 23 个连接(含 3 个达梦、5 个 PostgreSQL、15 个 MySQL),内存占用稳定在 3.2GB。
注意:
-Xmx不宜超过物理内存的 75%,否则触发系统 swap,性能暴跌。macOS/Linux 修改dbeaver.app/Contents/Eclipse/dbeaver.ini。
6. DBeaver 的生态延展:如何让它成为你数据库工作流的中枢神经
6.1 与 VS Code 的协同:用 DBeaver 做“重活”,VS Code 做“轻活”
很多人误以为必须二选一。实际上,DBeaver 和 VS Code 是互补关系:
- DBeaver 负责:复杂连接管理(SSH/SSL/多驱动)、大数据量导出/导入、跨库迁移、DDL 查看与生成、性能监控(v$ 视图查询);
- VS Code 负责:SQL 脚本编写(配合 SQLTools 插件)、Git 版本控制(
.sql文件提交)、团队 SQL Review(通过 PR 评论)、自动化任务(用 Tasks 运行psql -f script.sql)。
我的工作流:
- 在 DBeaver 中连接生产库,执行
EXPLAIN ANALYZE获取执行计划,截图保存; - 将优化后的 SQL 复制到 VS Code 的
optimize_user_order.sql文件中,提交到 GitLab; - CI 流水线用
sqlfluff检查 SQL 风格,用pgbench压测性能; - DBeaver 仅作为“生产环境操作终端”,VS Code 作为“SQL 代码工厂”。
6.2 自定义数据导出处理器:用 Groovy 脚本生成 Excel 报表
DBeaver 支持 Groovy 脚本扩展导出逻辑。例如,客户要求导出“用户订单报表”,需包含:订单号、用户姓名、下单时间、商品名称、金额、状态中文名(1→待支付,2→已发货)。
创建order_report.groovy:
import org.jkiss.dbeaver.model.data.DBDAttribute import org.jkiss.dbeaver.model.exec.DBCSession import org.jkiss.dbeaver.model.struct.DBSEntityAttribute def result = new ArrayList<LinkedHashMap>() while (resultSet.next()) { def row = [:] row['订单号'] = resultSet.getString('order_id') row['用户姓名'] = resultSet.getString('user_name') row['下单时间'] = resultSet.getTimestamp('create_time').format('yyyy-MM-dd HH:mm:ss') row['商品名称'] = resultSet.getString('product_name') row['金额'] = resultSet.getBigDecimal('amount') row['状态'] = ['待支付','已支付','已发货','已完成','已取消'][resultSet.getInt('status')-1] result.add(row) } return result在导出向导中,选择 “Groovy script”,指向该文件,DBeaver 会执行脚本,将结果渲染为 Excel,中文状态自动转换,无需手动 CASE WHEN。
6.3 开源贡献:从用户到参与者的路径
DBeaver 是 GitHub 上 Star 数超 3 万的顶级开源项目(https://github.com/dbeaver/dbeaver)。贡献门槛极低:
- 文档改进:官网文档(https://github.com/dbeaver/dbeaver/wiki)用 Markdown 编写,发现错别字、缺漏步骤,直接 PR;
- 驱动适配:为新数据库(如 OceanBase 4.0)编写驱动配置模板,提交到
plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/GenericDataSourceProvider.java; - Bug 修复:常见 Issue 如 “PostgreSQL 连接时 SSL mode 不生效”,定位到
org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource.java,修复后提交单元测试。
我去年提交了一个达梦驱动的连接参数修复(socketTimeout未传递),两天内被 Maintainer 合并进主线。开源不是遥不可及,它是解决自己痛点后,顺手帮别人一把。
最后分享一个小技巧:DBeaver 的“SQL Execution Log”(Window → Show View → Other → General → Error Log)会记录每一次 SQL 执行的完整 JDBC 调用栈。当遇到诡异错误时,打开它,复制堆栈中最上面的Caused by:行,Google 搜索,90% 的问题都能找到答案——因为 DBeaver 的每个异常,背后都是 JDBC 驱动的真实报错,而不是 GUI 层的模糊提示。这比 Datagrip 的“Connection failed”友好太多。