適用於 iPhone 的 HeapDeck: Postgres® Monitor

看清 Postgres 裡哪裡著火了。把火撲滅。

收到 Postgres 警報,筆電卻在家裡?HeapDeck 會顯示誰在阻擋、距離 wraparound 還有多遠、哪台備援伺服器落後了,並可直接在 iPhone 上處理。先止血,回到電腦前再徹底修復。

即將在 App Store 上架 上架時寄信通知

Free · Pro 單次購買 US$29.99 · PostgreSQL 13–18 · iOS 17+ · iPhone

HeapDeck 的「健康狀態」畫面,一台正式環境伺服器處於「嚴重」狀態:最上方是被阻擋的工作階段,接著依序是連線、最久的查詢、wraparound 與複寫

看清是誰擋住了 Postgres 的所有工作階段。先預覽,再取消根源。

「鎖定」畫面依 pg_blocking_pids() 建立阻擋樹狀圖,把根源阻擋者放在最上方:它的 pid、user@app、持有鎖定多久、正在執行什麼。下方列出卡在佇列中的每個工作階段。

  • 取消根源(解除 N 個阻擋)會在確認前顯示有多少工作階段卡在它後面,並列出它們的 pid。 PRO
  • HeapDeck 送出任何指令前,都會重新讀取阻擋鏈。若在決定的期間阻擋鏈已經改變,畫面會顯示新的數字,需要再確認一次。
  • 「取消」會停止執行中的查詢。「終止」會結束整個工作階段並回復其交易,執行前須輸入它的 pid。 PRO
  • 每個等待者都會顯示它在等什麼,例如 RowExclusiveLock on public.orders。處於 idle in transaction 的根源會被標示出來,發生死結時也會直接標明。
「鎖定」畫面:根源阻擋者已在交易中閒置 06:48,擋住了 4 個工作階段;下方是「取消根源(解除 4 個阻擋)」按鈕

趕在 Postgres 停止接受寫入之前,掌握 wraparound 到了百分之幾。

「Vacuum 與膨脹」畫面以佔 2³¹ 的比例,顯示伺服器距離交易 ID wraparound 還有多近,並列出依 relfrozenxid 年齡排序最舊的資料表。到達上限時,PostgreSQL 會拒絕寫入,並回報 database is not accepting commands to avoid wraparound data loss。

  • 從 75% 起,畫面會直接講明,並列出 autovacuum 跟不上的常見原因:長時間未結束的交易、未在使用的複寫槽、卡住的工作程序。
  • 每個資料表的死元組數量、死元組比例,以及上次執行 vacuum 的時間。
  • 未使用的索引及其佔用的空間。HeapDeck 會把 DROP INDEX CONCURRENTLY 拷貝到剪貼板,但從不自行執行。
  • 可直接從清單對資料表執行 VACUUM (ANALYZE) 或 ANALYZE。VACUUM FULL 須先輸入資料表名稱。 PRO
「Vacuum 與膨脹」畫面:交易 ID wraparound 已達 86%,警告「資料庫將停止接受寫入(達 100%)」,並列出三個可能原因

經由堡壘主機連線到 Postgres,沿用角色現有的權限。

HeapDeck 從 iPhone 直接連線到伺服器,或經由 SSH 堡壘主機連線。中間沒有 HeapDeck 伺服器,也不需要帳號。若設定了 AI 助理,它只會與所選的供應商通訊,並使用自己的金鑰。

  • SSH 通道支援密碼或 Ed25519 金鑰。首次連線時即釘選堡壘主機的主機金鑰。
  • TLS 預設使用 sslmode=require。憑證的 SHA-256 指紋會被釘選;憑證一旦變更,連線就會暫停,直到做出決定為止。
  • 密碼、金鑰與指紋留在這支 iPhone 的 Keychain 中,從不同步。開啟 App 需要 Face ID。
  • 沒有 superuser 權限?HeapDeck 不會只顯示空白畫面,而是列出所需的那行 GRANT pg_monitor。
首次連線時跳出的「驗證此伺服器」面板:顯示伺服器憑證的 SHA-256 指紋,信任之前可與自己的記錄比對

Postgres 事件發生時要打開的那些畫面

最前面是 10 張健康狀態卡片,每張背後都有一個原生畫面,不必在手機鍵盤上輸入 psql。需要時還有 SQL 主控台,每個陳述式執行前都會先經過檢查。

  • 健康狀態

    一個整體判斷加上 10 張卡片:工作階段數對照 max_connections、被阻擋的工作階段、最久的查詢、TPS、快取命中率、autovacuum、wraparound、複寫、資料庫大小與慢查詢。畫面開啟時每 10 秒重新整理一次。

  • 活動

    列出 pg_stat_activity 中的每個工作階段,等待中的排在最前面。可依使用中、idle in transaction、超過 10 秒或等待中篩選。在某一列上滑動,即可取消或終止。

  • 複寫與複寫槽

    每台備援伺服器的重播延遲,依 WAL 階段細分。列出每個複寫槽保留的 WAL;未在使用的複寫槽正在塞滿磁碟時會發出警告。

  • 慢查詢

    pg_stat_statements 中負擔最重的 300 個陳述式,可依總時間、平均時間、呼叫次數或列數排序,也能看到此刻正在執行某個陳述式的工作階段(PostgreSQL 14+)。

  • 資料與 SQL 主控台

    瀏覽資料表、在伺服器上篩選、沿著外來鍵跳轉、將一頁資料匯出為 CSV 或 JSON。主控台會在輸入時為每個陳述式分類;在 Free 版中,讀取會在 BEGIN READ ONLY 內執行。

  • AI 助理 PRO

    說明事件或阻擋鏈並草擬修正方式,使用自己的 API 金鑰或自己的 Ollama。它收到的是遮蔽後的快照,從不自行執行任何操作。

HeapDeck 1.0,使用範例資料;和 iOS 一樣提供深色與淺色外觀。

Postgres 監控免費。Pro 只需購買一次。

先在自己的正式環境上試用:所有監控畫面都無須付費,伺服器數量不限。Pro 只需支付一次 US$29.99,即可解鎖所有操作。不需訂閱,也不需帳號。

Free

永久免費

連上正式環境,一切一目了然。

  • 所有監控畫面:健康狀態、活動、鎖定、Vacuum 與膨脹、複寫、儲存空間、慢查詢
  • 不限數量的連線,支援 TLS、SSH 通道、指紋釘選與 Face ID
  • 資料瀏覽器:伺服器篩選、外來鍵跳轉、CSV 與 JSON 匯出
  • 用於讀取的 SQL 主控台,在唯讀交易中執行
  • SQL 分類器及其說明

Pro

US$29.99

單次購買

留給需要出手的那一刻。

  • 取消查詢與終止工作階段,取消阻擋鏈的根源
  • VACUUM、ANALYZE 以及刪除複寫槽
  • 主控台中的寫入與 DDL,經確認後執行
  • 在有主鍵的資料表中新增、編輯與刪除資料列
  • 使用自己的金鑰或模型的 AI 助理

在 Free 版中,Pro 操作依然看得到,並標示 PRO,可先了解它們會做什麼。在內建的示範事件中,助理可免費使用。在美國以外的地區,App Store 會以當地貨幣顯示價格。

即將在 App Store 上架 上架時寄信通知

Free · Pro 單次購買 US$29.99 · PostgreSQL 13–18 · iOS 17+ · iPhone

關於 HeapDeck 與 Postgres 的常見問題

支援 Amazon RDS、Cloud SQL、Azure 或 Supabase 嗎?

只要 iPhone 連得到,HeapDeck 就能搭配任何 PostgreSQL 13–18 使用,不論自行架設或代管、主要伺服器或備援伺服器。若角色不是 superuser,畫面會顯示哪些內容被隱藏,以及可解決問題的 GRANT pg_monitor。

代管服務供應商用來簽發憑證的根憑證並未內建於 iOS。對這類服務,請使用 sslmode=require:連線會加密,HeapDeck 會在首次連線時釘選憑證指紋。

能連到堡壘主機後方的資料庫嗎?

可以。在連線設定中開啟 SSH 通道,輸入堡壘主機的主機位址、使用者名稱,以及密碼或金鑰。金鑰必須是 OpenSSH 格式、未加密的 Ed25519 金鑰;堡壘主機本身的主機金鑰可以是 Ed25519 或 ECDSA,並會在首次連線時釘選。

1.0 版不支援 RSA 金鑰、受密碼保護的金鑰、一次性驗證碼或多層跳板主機。

登入資訊或資料會離開 iPhone 嗎?

HeapDeck 直接連線到伺服器,或經由 SSH 堡壘主機連線。沒有 HeapDeck 伺服器,也沒有帳號。密碼、SSH 金鑰與已釘選的指紋留在此裝置的 iOS Keychain 中,不會透過 iCloud 同步。

可能離開手機的內容有兩類,都由自己掌控:傳給所設定 AI 供應商的提問(Pro),以及當機報告與使用統計——可在首次啟動時或在「設定」中關閉。兩者都不包含 SQL、資料表名稱、主機名稱、值或登入資訊。詳情請見隱私權政策。

需要 superuser 嗎?

不需要。具備 pg_monitor 的角色就能使用所有監控畫面:GRANT pg_monitor TO your_role;。沒有它,HeapDeck 仍可運作,並會標示伺服器對此角色隱藏了哪些內容。取消其他角色的工作階段需要 PostgreSQL 的一般權限,例如 pg_signal_backend。

取消還是終止:該用哪個?

取消(pg_cancel_backend)會停止工作階段正在執行的查詢,工作階段與其交易仍保持開啟。終止(pg_terminate_backend)會結束整個工作階段,並回復其交易。

處於 idle in transaction 的工作階段沒有執行中的查詢,所以取消對它沒有作用:要釋放它持有的鎖定,得用終止。終止阻擋鏈的根源,或終止「正式」連線上的工作階段之前,HeapDeck 會要求輸入 pid。

HeapDeck 會把資料庫弄壞嗎?

Free 版完全不寫入:主控台的讀取會在 BEGIN READ ONLY … ROLLBACK 內執行。在 Pro 版中,每次寫入都要依序通過四道檢查:Pro、連線的「唯讀」開關、SQL 分類器,以及使用者的確認。

執行 VACUUM FULL、刪除複寫槽與終止阻擋鏈的根源之前,須先輸入資料表名稱、複寫槽名稱或 pid。標記為「正式」的連線會顯示 PROD 徽章,確認也更嚴格。

為什麼不直接 SSH 進去執行 psql?

當然還是可以。HeapDeck 為事件中的每個問題都準備了專屬畫面,不必在手機鍵盤上輸入查詢:誰在阻擋、有多少工作階段在等待、根源正在執行什麼、距離 wraparound 還有多遠、哪個複寫槽佔住了 WAL。執行操作前,它會重新讀取阻擋鏈,並要求確認。

AI 助理看得到什麼?

所詢問畫面的遮蔽後快照。其中從不包含主機、連接埠、密碼與金鑰,值會變成 $1 這類預留位置。使用雲端模型時,資料庫、資料表與欄位名稱預設會隱藏,收到回答後再於手機上還原。

請求會從 iPhone 送往所選的供應商,使用自己的金鑰(Anthropic、OpenAI、OpenRouter、Z.ai),或送往自己的 Ollama 或相容 OpenAI 的伺服器。「模型看到的」會在送出前顯示確切的文字。助理屬於 Pro 功能,從不自行執行 SQL。

需要訂閱嗎?

不需要。監控免費,Pro 只需單次購買 US$29.99,與 Apple ID 綁定。沒有帳號,也沒有試用期倒數。

出問題時會發出警報嗎?

不會。HeapDeck 只在開啟時運作,不做背景監控。現有的警報系統照常使用:HeapDeck 是收到警報後打開的那個畫面。

可以在 iPad 上使用嗎?

HeapDeck 專為直向 iPhone 設計。在 iPad 上,它會以 iPhone 相容模式執行。

Postgres 事件指南

半夜把人叫醒的那些問題,每個一頁:手動檢查用的 SQL,以及 HeapDeck 中的顯示。指南為英文。

部落格文章

所有文章

在下一次 Postgres 事件發生前,先裝到手機上。

新增伺服器、釘選它的憑證,所有監控畫面即可免費使用。Pro 則留給需要出手的那個夜晚。

即將在 App Store 上架 上架時寄信通知

Free · Pro 單次購買 US$29.99 · PostgreSQL 13–18 · iOS 17+ · iPhone