默认选中项由 default: true 字段决定,而非数组顺序;必须为布尔值、全局唯一、与 host/port 同级;客户端解析时机各异,需查文档确认;default 仅预选中不自动连接,真需自动连须配 auto_connect;环境变量可覆盖 default,避免多人冲突。
配置 server_list 默认选中项靠 default 字段,不是靠顺序或注释
很多团队误以为把核心生产库放在 server_list 数组第一个位置就能默认选中,结果启动后还是连上开发库——因为多数连接管理工具(如 dbeaver、datagrip 插件、自研运维面板)只认显式声明的 default: true 标识,不看数组索引。
实操建议:
-
default字段必须是布尔值true,写成字符串"true"或数字1会被忽略 - 整个列表中只能有一个
default: true,多个会导致行为未定义(常见表现:随机选中、回退到第一个、报错退出) - 如果用 YAML 配置,注意缩进对齐,
default必须和host、port等同级
server_list:
- name: "prod-core-db"
host: "db-prod.internal"
port: 5432
default: true # ✅ 生效
- name: "dev-test-db"
host: "db-dev.local"
port: 5433
default: false # ❌ 写不写都无所谓,但写了别写错类型
不同客户端对 default 的解析时机差异很大
有些工具(如基于 Electron 的桌面客户端)在首次加载配置时读取 default,之后切换服务器再重启也不会重置;而 CLI 工具(如 psql 封装脚本)可能每次启动都重新解析,依赖环境变量或命令行参数覆盖。
实操建议:
- 确认你用的是哪个客户端,查它的文档关键词 “default server” 或 “startup connection”
- CLI 类工具优先用
--default-server=prod-core-db这类参数,比改配置文件更可靠 - Web 管理后台若不支持
default字段,得靠 URL 参数(如?server=prod-core-db)或 localStorage 记录上次选择
default: true 不等于“自动连接”,只是设置初始高亮/预选中
这是最容易被忽略的一点:设了 default: true 后,界面里目标库会高亮、下拉框默认展开选中它,但绝大多数工具仍要求用户手动点“连接”或按回车——不会静默连上生产库。这是安全设计,不是 bug。
实操建议:
- 如果真需要启动即连,得额外配置
auto_connect: true(仅部分工具支持,如某些 VS Code 插件) - 生产环境强烈建议禁用自动连接,避免误操作导致连接风暴或日志刷屏
- 测试环境可开
auto_connect,但务必确保default指向的是隔离充分的测试实例,而非共享开发库
环境变量或启动参数能覆盖配置文件里的 default
当多人共用同一份配置文件(比如 Git 仓库里的 servers.yml),但各自开发机要连不同库时,硬编码 default: true 会互相冲突。这时候环境变量就是解耦关键。
实操建议:
- 优先用
SERVER_DEFAULT=prod-core-db这类变量,客户端启动时读取并覆盖配置中的default字段 - 检查工具是否支持该变量名,不支持就找替代方案,比如
DB_ENV=prod+ 配置里用模板语法{% if DB_ENV == 'prod' %}default: true{% endif %} - CI/CD 流水线中,用
--env SERVER_DEFAULT=ci-test-db启动测试容器,避免污染本地配置
配置生效的前提是工具真读了那个字段;很多老版本客户端根本不解析 default,得先升级或换工具。另外,别在 name 里加空格或特殊字符,某些解析器会截断或报错,连带让 default 失效。

















