<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Usql on Tarragon</title><link>https://tarrragon.github.io/blog/tags/usql/</link><description>Recent content in Usql on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 15 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/usql/index.xml" rel="self" type="application/rss+xml"/><item><title>終端機 SQL 客戶端：harlequin、lazysql 與 pgcli/litecli 的選型</title><link>https://tarrragon.github.io/blog/linux/tools/cli/sql-database-clients/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/sql-database-clients/</guid><description>&lt;p>終端機 SQL 客戶端把資料庫的 schema、表格與查詢結果做成可導航的文字介面，讓遠端只有終端機時也能瀏覽資料、跑查詢、看結果，取代把連線資訊餵給桌面 GUI（DBeaver、TablePlus）的需求。在純 SSH 情境下，它補上「連到遠端 DB 做事」這塊，而且全是文字、低頻寬友善。&lt;/p>
&lt;p>本文承接 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽&lt;/a> 的資料庫客戶端分類。工具分兩種範式：全螢幕 TUI 客戶端，與增強型 REPL。&lt;/p>
&lt;h2 id="兩種範式全螢幕-tui-與增強型-repl">兩種範式：全螢幕 TUI 與增強型 REPL&lt;/h2>
&lt;p>全螢幕 TUI（&lt;code>harlequin&lt;/code> / &lt;code>lazysql&lt;/code>）把 schema 樹、查詢編輯器、結果表格排進多個面板，像縮小版的 DBeaver。增強型 REPL（&lt;code>pgcli&lt;/code> / &lt;code>litecli&lt;/code>）仍是一行一行打 SQL，但加上語法高亮、智能補全與表格化輸出，是 &lt;code>psql&lt;/code> / &lt;code>mysql&lt;/code> 原生 client 的升級版。&lt;/p>
&lt;p>選哪種看工作型態：要邊看 schema 邊探索資料，用全螢幕 TUI；要快速接上跑幾條查詢、或塞進腳本，用 REPL。&lt;/p>
&lt;h2 id="全螢幕-tuiide-風與瀏覽器風">全螢幕 TUI：IDE 風與瀏覽器風&lt;/h2>
&lt;p>兩個全螢幕 TUI 的互動模型剛好相反，這是選型最該先分清的一點。&lt;/p>
&lt;p>&lt;code>harlequin&lt;/code> 是 SQL IDE 風：左側 Data Catalog 樹列出 db → schema → table → 欄位（帶型別標記，整數 &lt;code>#&lt;/code>、字串 &lt;code>s&lt;/code>、numeric &lt;code>#.#&lt;/code>），中間是查詢編輯器，寫好 SQL 按 &lt;code>Ctrl+Enter&lt;/code> 執行、結果在下方表格。點表只是把表的限定名稱插進編輯器、輔助組查詢，不會自動顯示資料。它用 Python（Textual）寫，adapter 涵蓋 postgres、mysql、sqlite、duckdb、odbc，預設 adapter 是 duckdb，連別的 DB 用 &lt;code>-a&lt;/code> 指定，例如 &lt;code>harlequin -a postgres &amp;quot;&amp;lt;連線字串&amp;gt;&amp;quot;&lt;/code> 或 &lt;code>harlequin -a sqlite db.sqlite&lt;/code>。&lt;/p>
&lt;p>&lt;code>lazysql&lt;/code> 是瀏覽器風：左側選一個表，右邊直接顯示該表記錄、不必寫 SELECT。上方分頁切 Records / Columns / Constraints / Foreign Keys / Indexes（&lt;code>[&lt;/code> 與 &lt;code>]&lt;/code> 切換）。篩選按 &lt;code>/&lt;/code> 開 WHERE 輸入，帶運算子補全（&lt;code>=&lt;/code>、&lt;code>≠&lt;/code>、&lt;code>&amp;gt;&lt;/code>、&lt;code>between&lt;/code>、&lt;code>ilike&lt;/code>、&lt;code>in&lt;/code>、&lt;code>like&lt;/code>、&lt;code>regexp&lt;/code> 等），只寫條件、不用整句。要跑自訂 SQL 按 &lt;code>Ctrl+E&lt;/code> 開編輯器（vim modal、有 &lt;code>-- INSERT --&lt;/code> 模式）寫完整語句、&lt;code>Ctrl+R&lt;/code> 執行。它用 Go 寫、lazygit 風的鍵盤導航。&lt;/p>
&lt;p>判讀：習慣先寫 query 再看結果的選 &lt;code>harlequin&lt;/code>；習慣點開表瀏覽、偶爾才下複雜 SQL 的選 &lt;code>lazysql&lt;/code>。&lt;/p>
&lt;p>&lt;code>dblab&lt;/code>（Go）與 &lt;code>rainfrog&lt;/code>（Rust）是另外兩個實機驗證過的瀏覽風 TUI。&lt;code>dblab&lt;/code> 走混合型：左側樹（&lt;code>Ctrl+H&lt;/code> 聚焦、&lt;code>j&lt;/code>/&lt;code>k&lt;/code> 移動、&lt;code>Enter&lt;/code> 看表的列）配上方查詢編輯器（&lt;code>Ctrl+E&lt;/code> 執行），瀏覽與寫 query 兩條路都有。它有一個實測 gotcha：編輯器的查詢要 schema 限定（&lt;code>SELECT * FROM public.products&lt;/code> 才行、裸 &lt;code>products&lt;/code> 會報 relation 不存在），因為編輯器連線的 search_path 沒含 public，而樹瀏覽（&lt;code>Enter&lt;/code>）不受這點影響。&lt;code>rainfrog&lt;/code> 專注 Postgres：側欄選表看 rows / columns / constraints / indexes / rls policies，查詢編輯器是 vim modal（&lt;code>i&lt;/code> 進 insert、&lt;code>v&lt;/code> 進 visual），另有 history 與 favorites 分頁。實測它不支援滑鼠操作，面板與分頁一律用 &lt;code>Tab&lt;/code> 切換、其餘靠鍵盤導航。&lt;/p>
&lt;h2 id="增強型-repldbcli-家族">增強型 REPL：dbcli 家族&lt;/h2>
&lt;p>&lt;code>pgcli&lt;/code>（Postgres）、&lt;code>mycli&lt;/code>（MySQL）、&lt;code>litecli&lt;/code>（SQLite）是同一個專案（dbcli）的三個 client，把原生 &lt;code>psql&lt;/code> / &lt;code>mysql&lt;/code> / &lt;code>sqlite3&lt;/code> 補上智能補全（表名、欄位、關鍵字）、語法高亮與對齊的表格化輸出。手感仍是 REPL，但打 SQL 時會即時提示。&lt;/p>
&lt;p>它們也能非互動執行、適合腳本：&lt;code>litecli&lt;/code> 用 &lt;code>-e&lt;/code>（&lt;code>litecli db.sqlite -e &amp;quot;SELECT ...&amp;quot;&lt;/code>），&lt;code>pgcli&lt;/code> 在 stdin 非 TTY 時讀管線（&lt;code>echo &amp;quot;SELECT ...&amp;quot; | pgcli &amp;quot;&amp;lt;連線字串&amp;gt;&amp;quot;&lt;/code>），輸出是對齊的 ASCII 表格。要在腳本裡取一次查詢結果、又想要比 &lt;code>psql -c&lt;/code> 更好的排版時，這條路最直接。&lt;/p></description><content:encoded><![CDATA[<p>終端機 SQL 客戶端把資料庫的 schema、表格與查詢結果做成可導航的文字介面，讓遠端只有終端機時也能瀏覽資料、跑查詢、看結果，取代把連線資訊餵給桌面 GUI（DBeaver、TablePlus）的需求。在純 SSH 情境下，它補上「連到遠端 DB 做事」這塊，而且全是文字、低頻寬友善。</p>
<p>本文承接 <a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a> 的資料庫客戶端分類。工具分兩種範式：全螢幕 TUI 客戶端，與增強型 REPL。</p>
<h2 id="兩種範式全螢幕-tui-與增強型-repl">兩種範式：全螢幕 TUI 與增強型 REPL</h2>
<p>全螢幕 TUI（<code>harlequin</code> / <code>lazysql</code>）把 schema 樹、查詢編輯器、結果表格排進多個面板，像縮小版的 DBeaver。增強型 REPL（<code>pgcli</code> / <code>litecli</code>）仍是一行一行打 SQL，但加上語法高亮、智能補全與表格化輸出，是 <code>psql</code> / <code>mysql</code> 原生 client 的升級版。</p>
<p>選哪種看工作型態：要邊看 schema 邊探索資料，用全螢幕 TUI；要快速接上跑幾條查詢、或塞進腳本，用 REPL。</p>
<h2 id="全螢幕-tuiide-風與瀏覽器風">全螢幕 TUI：IDE 風與瀏覽器風</h2>
<p>兩個全螢幕 TUI 的互動模型剛好相反，這是選型最該先分清的一點。</p>
<p><code>harlequin</code> 是 SQL IDE 風：左側 Data Catalog 樹列出 db → schema → table → 欄位（帶型別標記，整數 <code>#</code>、字串 <code>s</code>、numeric <code>#.#</code>），中間是查詢編輯器，寫好 SQL 按 <code>Ctrl+Enter</code> 執行、結果在下方表格。點表只是把表的限定名稱插進編輯器、輔助組查詢，不會自動顯示資料。它用 Python（Textual）寫，adapter 涵蓋 postgres、mysql、sqlite、duckdb、odbc，預設 adapter 是 duckdb，連別的 DB 用 <code>-a</code> 指定，例如 <code>harlequin -a postgres &quot;&lt;連線字串&gt;&quot;</code> 或 <code>harlequin -a sqlite db.sqlite</code>。</p>
<p><code>lazysql</code> 是瀏覽器風：左側選一個表，右邊直接顯示該表記錄、不必寫 SELECT。上方分頁切 Records / Columns / Constraints / Foreign Keys / Indexes（<code>[</code> 與 <code>]</code> 切換）。篩選按 <code>/</code> 開 WHERE 輸入，帶運算子補全（<code>=</code>、<code>≠</code>、<code>&gt;</code>、<code>between</code>、<code>ilike</code>、<code>in</code>、<code>like</code>、<code>regexp</code> 等），只寫條件、不用整句。要跑自訂 SQL 按 <code>Ctrl+E</code> 開編輯器（vim modal、有 <code>-- INSERT --</code> 模式）寫完整語句、<code>Ctrl+R</code> 執行。它用 Go 寫、lazygit 風的鍵盤導航。</p>
<p>判讀：習慣先寫 query 再看結果的選 <code>harlequin</code>；習慣點開表瀏覽、偶爾才下複雜 SQL 的選 <code>lazysql</code>。</p>
<p><code>dblab</code>（Go）與 <code>rainfrog</code>（Rust）是另外兩個實機驗證過的瀏覽風 TUI。<code>dblab</code> 走混合型：左側樹（<code>Ctrl+H</code> 聚焦、<code>j</code>/<code>k</code> 移動、<code>Enter</code> 看表的列）配上方查詢編輯器（<code>Ctrl+E</code> 執行），瀏覽與寫 query 兩條路都有。它有一個實測 gotcha：編輯器的查詢要 schema 限定（<code>SELECT * FROM public.products</code> 才行、裸 <code>products</code> 會報 relation 不存在），因為編輯器連線的 search_path 沒含 public，而樹瀏覽（<code>Enter</code>）不受這點影響。<code>rainfrog</code> 專注 Postgres：側欄選表看 rows / columns / constraints / indexes / rls policies，查詢編輯器是 vim modal（<code>i</code> 進 insert、<code>v</code> 進 visual），另有 history 與 favorites 分頁。實測它不支援滑鼠操作，面板與分頁一律用 <code>Tab</code> 切換、其餘靠鍵盤導航。</p>
<h2 id="增強型-repldbcli-家族">增強型 REPL：dbcli 家族</h2>
<p><code>pgcli</code>（Postgres）、<code>mycli</code>（MySQL）、<code>litecli</code>（SQLite）是同一個專案（dbcli）的三個 client，把原生 <code>psql</code> / <code>mysql</code> / <code>sqlite3</code> 補上智能補全（表名、欄位、關鍵字）、語法高亮與對齊的表格化輸出。手感仍是 REPL，但打 SQL 時會即時提示。</p>
<p>它們也能非互動執行、適合腳本：<code>litecli</code> 用 <code>-e</code>（<code>litecli db.sqlite -e &quot;SELECT ...&quot;</code>），<code>pgcli</code> 在 stdin 非 TTY 時讀管線（<code>echo &quot;SELECT ...&quot; | pgcli &quot;&lt;連線字串&gt;&quot;</code>），輸出是對齊的 ASCII 表格。要在腳本裡取一次查詢結果、又想要比 <code>psql -c</code> 更好的排版時，這條路最直接。</p>
<p><code>usql</code> 走另一條路：universal CLI，一個工具用統一介面連 Postgres、MySQL、SQLite 等各種 DB，連線字串以 scheme 區分（<code>postgres://...</code>、<code>sqlite:...</code>），也支援 <code>-c</code> 非互動執行。它不是 TUI，行為像能連多種 DB 的加強版 <code>psql</code>。一台機器要連好幾種不同 DB 時，一個 usql 比每種 DB 各裝一個 client 省事。</p>
<h2 id="遠端連線的一個-gotchassl-模式因-driver-而異">遠端連線的一個 gotcha：SSL 模式因 driver 而異</h2>
<p>同一個 Postgres、同一條連線字串，不同 client 的 SSL 預設不一樣。<code>lazysql</code> 走 Go 的 <code>pq</code> driver、預設要求 SSL，連沒開 SSL 的 DB 會報 <code>pq: SSL is not enabled on the server</code>，要在連線字串加 <code>?sslmode=disable</code>：<code>postgresql://user:pass@host:5432/db?sslmode=disable</code>。<code>pgcli</code> 與 <code>harlequin</code> 走 Python 的 psycopg、預設行為不同，同樣的 DB 不加也能連。遠端連不上、又確定帳密與 port 對的時候，先查的就是 sslmode。</p>
<h2 id="同類其他選擇">同類其他選擇</h2>
<p>同範式還有 <code>gobang</code>（Rust）。它未上 crates.io、Homebrew 也沒有對應 formula，本機未能安裝，列出供參考、未實機驗證。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>把 DB client 擺進可持久化的多工器 pane：<a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎</a>。</li>
<li>編譯型工具（<code>lazysql</code> / <code>dblab</code> / <code>rainfrog</code>）搬到遠端的單一 binary 注意事項：<a href="/blog/linux/tools/cli/git-line-graph-tools-for-remote-cli/" data-link-title="遠端 CLI 開發的 git 線圖工具選型：tig、lazygit、gitui 與管線增強" data-link-desc="純 CLI、遠端開發情境下查看 git 分支線圖的工具地景，從 tig 唯讀瀏覽到 lazygit/gitui 操作中樞的定位差異，含選型判準與 lazygit 上手、delta side-by-side diff 設定。">git 線圖工具選型</a>。</li>
<li>SQL 客戶端在遠端工具分類中的定位：<a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a>。</li>
</ul>
]]></content:encoded></item></channel></rss>