编程 lazysql:用 Vim 键位在终端连库,跑完 SELECT 就回代码

2026-11-11 21:33:01

lazysql:用 Vim 键位在终端连库,跑完 SELECT 就回代码

它是什么

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 MySQLmysql3307lazysql_test
Docker PostgreSQLpostgres5433lazysql_test
Docker MSSQLsqlserver14331lazysql_test
Docker SQLitesqlite3文件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 阶段的坑就留在开发库那边。

复制全文 生成海报 lazysql Go MySQL PostgreSQL 终端工具

推荐文章

程序员茄子在线接单