在云上开一个 Postgres 现在只要四十秒,麻烦的是开完之后想进去看一眼。常见做法无非三种:给数据库开一个对外端口,挖一条 SSH 隧道,或者在每台需要用的机器上装一个桌面客户端。第一种是安全团队最不愿意看到的;第二种每换一个环境就要重配一次;第三种意味着团队里每个人的电脑上都散落着一份连接配置和一份缓存下来的数据,人一走,这些东西的去向没人说得清。
LibreDB Studio 选的是第四条路——把 SQL 客户端本身部署到数据库旁边。它是一个跑在浏览器里的自托管 SQL IDE,以容器、 Helm chart、 OpenShift operator 或者 PaaS 一键模板的形式部署在数据库所在的那个网络里,也可以用 npm i @libredb/studio 直接嵌进自家产品。整套东西不需要任何一端朝外暴露。项目八月二十号刚在 PostgreSQL 官方新闻里发布了 0.12.0,几天时间已经迭代到 0.13.1,节奏相当快,许可证是 MIT。

最省事的试法是一条 Docker 命令:
docker run -p 3000:3000 ghcr.io/libredb/libredb-studio:latest
跑起来之后用浏览器打开本机的 3000 端口就行,首次启动的管理员密码会直接打印在容器日志里,不需要预先配置任何东西。手上没有 Docker 的话, Node 24 以上可以直接 npx @libredb/studio;要塞进 Kubernetes 就是 helm install libredb oci://ghcr.io/libredb/charts/libredb-studio,同样是零配置起步,首次凭据打在 Pod 日志里。此外还有 Homebrew、 Snap、 winget、 deb/rpm 以及 AppImage 和 Flatpak 形态的桌面版,分发渠道铺得比大多数同类项目都全。
引擎覆盖是它比较硬的一块。这一版自带十四个驱动:PostgreSQL、 MySQL、 Oracle、 SQL Server、 SQLite、 MongoDB、 Redis、 Couchbase、 ClickHouse、 Druid、 Elasticsearch、 OpenSearch、 Trino 和 Cassandra。再往外,另有十九个引擎因为兼容上述某种线协议而可以直接复用现成驱动接进来——MariaDB、 TiDB、 Vitess、 StarRocks、 OceanBase、 SingleStore、 Citus、 TimescaleDB、 YugabyteDB、 CockroachDB、 Materialize、 RisingWave 走 PostgreSQL 或 MySQL 通路,Valkey、 DragonflyDB、 KeyDB 走 Redis,FerretDB 走 MongoDB,ScyllaDB 走 Cassandra,加起来是十四个驱动摸到三十三个具名引擎。

真正让我觉得这个项目靠谱的,反倒不是这份长名单,而是它对名单里每一项的坦白程度。文档没有笼统写一句“全面支持”,而是逐个引擎交代哪些面板能用、哪些数字不能信:Citus 的分布式表和 TimescaleDB 的超表报出来的行数和大小是错的而不是缺的;YugabyteDB 在跑 ANALYZE 之前一律报 0;Vitess 的行数精确到字节,但正在跑的查询取消不掉,因为 vtgate 拒绝 KILL QUERY;StarRocks 把自己报成 MySQL 5.1,于是概览、健康、会话、监控四个面板一起失效;ScyllaDB 因为没有 system_views keyspace,连测试连接都过不去。Cassandra 那一段更彻底——因为它公布的只是从已刷盘文件里估算的分区数(实测一张 500 行的表读出来是 143),所以对象浏览器干脆两个数都不显示,宁可空着也不显示一个错的。愿意把这些写进 README 的项目不多。
功能面上,编辑器内核用的是 Monaco,也就是 VS Code 那一套,带 schema 感知的补全和多标签并行执行;结果网格基于 TanStack 虚拟化,几百万行也能滚;EXPLAIN 有图形化执行计划。ER 图这块做得比较认真,用 ReactFlow 加 ELK.js 自动分层布局,画的是真实外键连线并带基数标注,可以导出 PNG 或 SVG——顺带一提,Trino 因为本身不存数据、不声明主外键和索引,ER 图就只画方框不画连线,这个处理方式和上面那种坦白是一脉相承的。schema 快照可以横向排在时间线上,点任意两个点就能对比差异并生成迁移 SQL。

日常干活会用到的还有两组工具。一是数据剖析,一键跑出每列的空值率、基数、最大最小值和样本值,三十万行级别的表也能出结果;二是代码生成,从活的表结构直接产出 TypeScript 接口、 Zod schema、 Prisma model、 Go struct、 Python dataclass 或 Java POJO,另外还能按 schema 语义生成假数据,识别得出邮箱、电话、姓名、地址这类三十多种列含义,输出 INSERT 语句或 MongoDB 的 insertMany JSON。


因为定位是“部署在环境里”而不是“装在个人电脑上”,权限这一层就不能糊弄。它支持本地账号密码和 OIDC 单点登录两种模式,用环境变量切换,PKCE 走的是标准授权码流程,角色映射支持点号取嵌套 claim(比如 realm_access.roles),任意兼容 OIDC 的身份提供方都能接。每一条 API 路由上都有 RBAC,全组织执行过的查询留有完整审计轨迹。管理员还有一套 DBA 维护面板:七个标签页的实时监控、连接池指标、缓存命中率和死锁的阈值告警,以及按引擎一键触发 VACUUM、ANALYZE、REINDEX、UPDATE STATISTICS、DBCC CHECKDB 这类维护动作。
值得强调的是这些能力没有分版本。单点登录、 ER 图、 NoSQL 引擎、 AI 相关功能全部在 MIT 构建里,没有企业版开关。作者给的理由很实在——这不是慷慨,是架构决定的:一个要按人头收费、按功能上锁的工具,根本没法被部署到你拥有的每一个环境里去。
它确实也带了模型驱动的部分,一条侧边的智能体栏,可以针对连上的库提问、由它起草 SQL 并读结果写成带引用的报告。但这块有明确边界:只读,而且是靠数据库本身而不是靠解析器保证的——PostgreSQL 上开只读事务,SQLite 上每条语句重新断言 PRAGMA query_only,写操作和 DDL 在碰到数据库之前就被拒掉,连 EXPLAIN ANALYZE 都默认禁止,因为它会真的执行语句。也正因为这个只读执行档是数据库原生的,智能体模式目前只在这两个引擎上开放,别的引擎会直接返回不支持。没配任何模型时整条栏根本不渲染,什么也不会离开你的网络。这个态度我认为比“全都接上再说”要好。
有几点使用前应该知道。显示脱敏目前是预览状态,而且只是浏览器端的展示层——对屏幕共享和演示有用,但 API 返回的仍然是完整值,不能当作服务端强制的数据保护。Druid、 Elasticsearch、 OpenSearch 三个是只读的,因为它们各自的 SQL 语法里本来就没有 UPDATE 和 CREATE TABLE。SSH 隧道只对按主机加端口配置的连接生效,用连接串配置的(MongoDB、 Couchbase、 ClickHouse 可选此方式)不走隧道。
在 DBeaver、 Navicat、 TablePlus 这些桌面客户端已经很成熟的今天,再做一个 SQL 客户端听起来不算什么新鲜事。LibreDB Studio 换掉的其实是部署位置这一个变量,而这个变量恰好决定了数据从哪里流出去、审计记录留在谁手里。对内网数据库多、又不想给每个人开外网入口的团队,这条路子是值得试一下的,也可以到 云栈社区 和同行聊聊实际落地效果。
项目地址: https://github.com/libredb/libredb-studio