lazysql:用 Vim 键位在终端连库,跑完 SELECT 就回代码
- 仓库:jorgerojas26/lazysql
- 发布页:Releases
- MIT License,约 4400 star,Go + tview 实现
它是什么
lazysql 是一个跨平台(macOS、Windows、Linux)的 TUI 数据库管理工具,灵感来自 Lazygit。作者想要一个「Git 有 lazygit,SQL 也有类似东西」的终端客户端,没找到合用的,就自己写了一个。
README 里写得很直白:这是作者第一个开源项目、第一个 Go 项目,本职是 JavaScript 全栈,项目处于 ALPHA 阶段,自称 spaghetti code,欢迎提 issue;他自己每天上班都在用这个「有 bug 的版本」。项目在 2026 年 6 月初到 0.5.3。
界面是三栏:左边数据库和表的树,右边数据网格,SQL 编辑器可以随时呼出。连接、标签页、过滤、排序、CSV 导出、查询历史都在 TUI 内完成。
功能与快捷键
- Vim 键位:
j/k在树里移动,/开始搜索 - 多连接管理:
Backspace - 标签页:
Tab - SQL 编辑器:
Ctrl + E - 快捷键列表:
? - 新建连接:
n,填名称和 URL,按space连接;已有连接用j/h导航,按c或space连接
支持的数据库:MySQL、PostgreSQL、SQLite、MSSQL、ClickHouse。MongoDB 未支持。
安装
# Homebrew(macOS / Linux)
brew install lazysql
# go install
go install github.com/jorgerojas26/lazysql@latest
# Arch AUR
paru -S lazysql
# 或 yay -S lazysql
也可以从 Releases 下载 Windows / macOS / Linux 二进制。
仓库自带的测试环境
仓库里有一套只用于开发的 docker compose fixture,覆盖 MySQL、PostgreSQL、MSSQL、SQLite。前置只需要 Docker、Docker Compose v2 和 OpenSSL,宿主机不用装任何数据库客户端。
从仓库根目录启动 lazysql 时,生成的 .lazysql.toml 会被自动发现,里面四个连接开箱即用:
| 连接 | Provider | 端口 | 数据库 |
|---|---|---|---|
| Docker MySQL | mysql | 3307 | lazysql_test |
| Docker PostgreSQL | postgres | 5433 | lazysql_test |
| Docker MSSQL | sqlserver | 14331 | lazysql_test |
| Docker SQLite | sqlite3 | 文件 | testdata/sqlite/lazysql.sqlite3 |
命令行与连接串
lazysql # 打开 TUI
lazysql # 带连接串启动
lazysql --read-only # 只读模式
lazysql -config ~/my_config.toml
lazysql -loglevel debug -logfile /tmp/lazysql.log
README 给出的连接串形式:
postgres://user:pass@localhost/dbname
pg://user:pass@localhost/dbname?sslmode=disable
mysql://user:pass@localhost/dbname
mysql:/var/run/mysqld/mysqld.sock
sqlserver://user:pass@remote-host.com/dbname
mssql://user:pass@remote-host.com/instance/dbname
ms://user:pass@remote-host.com:port/instance/dbname?keepAlive=10
file:myfile.sqlite3?loc=auto
/path/to/sqlite/file/test.db
clickhouse://user:pass@localhost:9000/dbname
ch://user:pass@remote-host.com:9440/dbname?secure=true
clickhouse+http://user:pass@localhost:8123/dbname
clickhouse+https://user:pass@remote-host.com:8443/dbname
MySQL 走 Unix socket 时直接写 socket 路径,例如 mysql:/var/run/mysqld/mysqld.sock;PostgreSQL 本地连接常带 ?sslmode=disable;SQL Server 可用 sqlserver://host/instance 形式。
配置文件
配置文件是 TOML:
- Linux:
~/.config/lazysql/config.toml - macOS:
~/Library/Application Support/lazysql/config.toml - 或
XDG_CONFIG_HOME指向的位置
一个最小配置:
[[database]]
Name = 'PHP Tek local'
Provider = 'mysql'
DBName = 'phptek'
URL = 'mysql://root:${env:DB_PASSWORD}@127.0.0.1:3306/phptek'
[[database]]
Name = 'PHP Architect staging'
Provider = 'mysql'
DBName = 'phparch'
URL = 'mysql://reader:${env:STAGING_PASSWORD}@10.0.0.12:3306/phparch'
ReadOnly = true
[[database]] 段的字段包括 Name、Provider、DBName、URL、ReadOnly。URL 里可以用 ${env:XXX} 读环境变量,密码不必写进文件。
ReadOnly = true 会在执行前拒绝所有写操作:INSERT、UPDATE、DELETE、DROP 都跑不起来。生产库或任何「看起来像生产」的连接都该打开;命令行也可以用 lazysql --read-only 临时只读。这是防止「我以为连的是本地」的低成本保险。
取舍:连上看一眼,不负责建表
lazysql 不是要替代完整的 GUI 数据库工具。它没有建表入口,也不做 schema 设计或复杂的可视化查询构建。适合做的事很具体:连上库、看看表、过滤排序、跑一条 SELECT、拿到结果,然后回到代码。
PHP 项目里这类动作一天要重复几十次:查一个 Eloquent 关系为什么返回错行,确认迁移是不是真的加上了预期的列,或者扫一眼 users 表看 seeder 跑没跑。以前要开 TablePlus、Sequel Ace、DBeaver,或者在浏览器标签里开 phpMyAdmin;只为一条 SELECT 切出终端并不划算。
在 Laravel / Symfony 项目里,配合仓库自带的 fixture 或自己的连接配置,lazysql 可以一直留在终端里:左边点到表,右边看数据,需要复杂条件时 Ctrl + E 打开 SQL 编辑器写查询。生产连接统一配 ReadOnly = true 或走 --read-only,ALPHA 阶段的坑就留在开发库那边。