项目地址:
- GitHub - LuciusChen/clutch: Interactive database client for Emacs — MySQL, PostgreSQL, SQLite (pure Elisp) plus Oracle, SQL Server, DB2, Snowflake & Redshift via JDBC; paginated result browser, inline editing, schema browser, and REPL. · GitHub
- GitHub - LuciusChen/clutch-jdbc-agent: Minimal JVM sidecar that bridges clutch (Emacs database client) to JDBC-compatible databases — Oracle, SQL Server, DB2, Snowflake, Redshift, and more · GitHub
写了个 Emacs 数据库客户端,用了一段时间了,分享出来。
MySQL 和 PostgreSQL 是纯 Elisp 实现的,直接走 wire protocol,不需要装 mysql CLI 或者 libpq。SQLite 用的是 Emacs 29+ 内置的 sqlite 支持。Oracle、SQL Server、DB2、Snowflake、Redshift 这些走 JDBC,通过一个小 JVM sidecar(clutch-jdbc-agent)来跑,Emacs 和它之间用 stdin/stdout JSON 通信,第一次用的时候会自动下载。
主要功能:
- 结果表格可以横向翻列(
[/]),不用横向滚动 - 表格里直接改单元格,自动生成
UPDATE,确认后提交;也可以插行(o)删行(d) - 有外键的话可以直接跳到关联表的对应行
- Schema 浏览器,
TAB展开列详情 - 补全会根据当前语句的
FROM子句来,只补当前查询里用到的表和列 - Eldoc 支持:悬停在表名/列名上会显示类型、是否可空、PK/FK 信息;MySQL 还会查在线
HELP - 值查看器(
v):JSON 直接美化,XML 格式化,BLOB 十六进制预览 - Org-Babel 集成,可以在 Org 文件里跑 SQL
暂时没上 MELPA,从源码加载:
(add-to-list 'load-path "/path/to/clutch")
(require 'clutch)
(setq clutch-connection-alist
'(("dev-mysql" . (:backend mysql
:host "127.0.0.1" :port 3306
:user "root" :password "secret"
:database "mydb"))
("dev-pg" . (:backend pg
:host "127.0.0.1" :port 5432
:user "postgres" :password "secret"
:database "mydb"))
("dev-sqlite" . (:backend sqlite
:database "/path/to/my.db"))
;; Oracle 需要 Java 11+ 和 ojdbc jar 放到 drivers/ 下
("prod-oracle" . (:backend oracle
:url "jdbc:oracle:thin:@//host:1521/ORCL"
:user "scott" :password "tiger"))))
M-x clutch-query-console 选连接就可以用了。