iPhone向けのHeapDeck: Postgres® Monitor

Postgresで何が燃えているかを見る。火を消す。

Postgresのアラートで呼び出されたのに、ノートPCは家にある?HeapDeckなら、どのセッションがブロックしているか、wraparoundまであとどれくらいか、どのスタンバイが遅れているかがわかり、そのままiPhoneから対処できます。今は暫定対応で被害を止め、恒久対応はデスクに戻ってから。

Free · Pro $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のあいだidle in transactionのままのルートブロッカーが4セッションをブロックしている。その下に「ルートをキャンセル (4件のブロックを解除)」ボタン

Postgresが書き込みを拒否する前に、wraparoundが何%かを把握する。

「Vacuumと肥大化」画面は、サーバーがトランザクションIDのwraparoundにどこまで近づいているかを2³¹に対する割合で示し、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%に達するとデータベースが書き込みを受け付けなくなるという警告、考えられる3つの原因

踏み台サーバー経由でPostgresへ。ロールが今持っている権限のまま。

HeapDeckはiPhoneからサーバーへ、直接またはSSH踏み台サーバー経由で接続します。間にHeapDeckのサーバーはなく、アカウントもありません。AIアシスタントを設定した場合も、通信するのは自分で選んだプロバイダーだけで、使うのは自分のキーです。

  • パスワードまたはEd25519キーによるSSHトンネル。踏み台サーバーのホストキーは初回接続時にピン留めされます。
  • TLSは既定でsslmode=require。証明書のSHA-256フィンガープリントをピン留めし、証明書が変わった場合は判断するまで接続を止めます。
  • パスワード、キー、フィンガープリントはこのiPhoneのKeychainに保管され、同期されることはありません。アプリはFace IDで開きます。
  • スーパーユーザー権限がない?HeapDeckは空の画面を出す代わりに、必要なGRANT pg_monitorを正確に示します。
初回接続時の「このサーバーを確認」シート:信頼する前に自分の記録と照合するための、サーバー証明書のSHA-256フィンガープリント

Postgresのインシデント中に開く画面

最初に「ヘルス」の10枚のタイルがあり、その奥にはそれぞれネイティブの画面があるので、スマートフォンのキーボードでpsqlを打つ必要はありません。必要なときにはSQLコンソールもあり、すべてのステートメントを実行前にチェックします。

  • ヘルス

    1つの総合判定と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は$29.99の一度の購入で操作機能をアンロックします。サブスクリプションもアカウントもありません。

Free

ずっと無料

本番環境に接続して、すべてを確認できます。

  • すべての監視画面:ヘルス、アクティビティ、ロック、Vacuumと肥大化、レプリケーション、ストレージ、スロークエリ
  • TLS、SSHトンネル、フィンガープリントのピン留め、Face IDに対応した接続を無制限に
  • サーバー側フィルター、外部キー、CSVとJSONのエクスポートに対応したデータブラウザー
  • SQLコンソールでの読み取り(読み取り専用トランザクション内で実行)
  • SQL分類器とその説明

Pro

$29.99

買い切り

対処が必要になったときのために。

  • セッションのキャンセルと終了、ロックの連鎖のルートのキャンセル
  • VACUUM、ANALYZE、レプリケーションスロットの削除
  • コンソールでの書き込みとDDL(確認付き)
  • 主キーのあるテーブルでの行の挿入、編集、削除
  • 自分のキーまたはモデルで使うAIアシスタント

Proの操作はFreeでもPROの印付きで表示されるので、何をするのかを確認できます。アシスタントは、内蔵のデモインシデントでは無料で使えます。米国以外では、App Storeが現地の通貨で価格を表示します。

Free · Pro $29.99(買い切り) · PostgreSQL 13–18 · iOS 17以降 · iPhone

HeapDeckとPostgresについてよくある質問

Amazon RDS、Cloud SQL、Azure、Supabaseでも使えますか?

HeapDeckは、iPhoneから到達できるPostgreSQL 13–18であれば、セルフホストでもマネージドでも、プライマリでもスタンバイでも使えます。ロールがスーパーユーザーでない場合は、何が隠れているかと、それを解決するGRANT pg_monitorを画面に表示します。

マネージドプロバイダーは、iOSに含まれていないルート証明書で証明書に署名しています。その場合はsslmode=requireを使ってください。接続は暗号化され、HeapDeckは初回接続時に証明書のフィンガープリントをピン留めします。

踏み台サーバーの奥にあるデータベースにも接続できますか?

はい。接続設定でSSHトンネルをオンにし、踏み台サーバーのホスト、ユーザー、パスワードまたはキーを入力します。キーは、OpenSSH形式の暗号化されていないEd25519キーである必要があります。踏み台サーバー自体のホストキーはEd25519とECDSAのどちらでもよく、初回接続時にピン留めされます。

バージョン1.0は、RSAキー、パスフレーズ付きのキー、ワンタイムコード、多段の踏み台サーバーには対応していません。

認証情報やデータがiPhoneの外に出ることはありますか?

HeapDeckはサーバーへ直接、またはSSH踏み台サーバー経由で接続します。HeapDeckのサーバーもアカウントもありません。パスワード、SSHキー、ピン留めしたフィンガープリントは、このデバイスのiOS Keychainにとどまり、iCloudとは同期されません。

iPhoneの外に出る可能性があるものは2つあり、どちらも自分で管理できます。設定したAIプロバイダーへの質問(Pro)と、初回起動時または設定でオフにできるクラッシュレポートと利用回数の集計です。どちらにも、SQL、テーブル名、ホスト名、値、認証情報は含まれません。詳しくはプライバシーポリシーをご覧ください。

スーパーユーザー権限は必要ですか?

いいえ。監視画面にはpg_monitorを持つロールで足ります:GRANT pg_monitor TO your_role;。それがなくてもHeapDeckは動作し、サーバーがロールから隠している項目を明示します。他のロールのセッションをキャンセルするには、pg_signal_backendなど、通常のPostgreSQLの権限が必要です。

キャンセルと終了、どちらを使えばいいですか?

キャンセル(pg_cancel_backend)は、セッションが実行中のクエリを止めます。セッションとトランザクションは開いたままです。終了(pg_terminate_backend)はセッション全体を強制終了し、トランザクションをロールバックします。

idle in transactionのセッションには実行中のクエリがないため、キャンセルしても何も起きません。ロックを解放するのは終了です。HeapDeckは、ロックの連鎖のルートや「本番」接続のセッションを終了する前に、pidの入力を求めます。

HeapDeckがデータベースを壊すことはありますか?

Freeは一切書き込みません。コンソールでの読み取りはBEGIN READ ONLY … ROLLBACKの中で実行されます。Proでは、すべての書き込みが4つのチェックを順に通ります:Pro、接続の「読み取り専用」スイッチ、SQL分類器、そして確認画面での承認です。

VACUUM FULL、スロットの削除、ロックのルートの終了では、先にテーブル名、スロット名、pidの入力を求めます。「本番」に設定した接続にはPRODバッジが付き、確認がより厳しくなります。

SSHでログインしてpsqlを使えばいいのでは?

もちろん、それもできます。HeapDeckはインシデント中の問いごとに専用の画面を用意しているので、スマートフォンのキーボードでクエリを打たずに済みます:誰がブロックしていて何件待っているか、ルートが何を実行しているか、wraparoundまであとどれくらいか、どのスロットがWALを保持しているか。操作の前にはロックの連鎖を読み直し、確認を求めます。

AIアシスタントには何が見えますか?

質問した画面の、マスキング済みのスナップショットです。ホスト、ポート、パスワード、キーが含まれることはなく、値は$1のようなプレースホルダーになります。クラウドのモデルでは、データベース名、テーブル名、列名が既定で隠され、回答が届くとiPhone上で元に戻されます。

リクエストはiPhoneから、自分のキーで選んだプロバイダー(Anthropic、OpenAI、OpenRouter、Z.ai)へ、または自分のOllamaやOpenAI互換サーバーへ送られます。「モデルに見えている内容」で、送信前に正確なテキストを確認できます。アシスタントはProの機能で、自分からSQLを実行することはありません。

サブスクリプションはありますか?

いいえ。監視は無料で、ProはApple IDに紐づく$29.99の買い切りです。アカウントも試用期限もありません。

障害が起きたら通知してくれますか?

いいえ。HeapDeckは開いている間に動作し、バックグラウンドでの監視は行いません。アラートの仕組みは今のまま使ってください。HeapDeckは、呼び出しを受けた後に開く画面です。

iPadでも使えますか?

HeapDeckはiPhoneの縦向き表示用に作られています。iPadではiPhone互換モードで動作します。

Postgresインシデントのガイド

夜中に呼び出される問題を1ページずつ。手動で確認するためのSQLと、HeapDeckでの見え方を紹介します。ガイドは英語です。

ブログから

すべての記事

次のPostgresインシデントの前に、iPhoneに入れておきましょう。

サーバーを追加して証明書をピン留めすれば、すべての監視画面を無料で使えます。Proは、対処が必要になる夜のためにあります。

Free · Pro $29.99(買い切り) · PostgreSQL 13–18 · iOS 17以降 · iPhone