ホームブログ › FrontierStack で PostgreSQL を Docker で動かし、監視する

FrontierStack で PostgreSQL を Docker で動かし、監視する

公開 2026-09-02

PostgreSQL の障害は MySQL とは異なります。遅いのはクエリではなく、誰かが開いたままにしたトランザクションであることがほとんどです。ロックを保持し続け、その後ろで他のバックエンドが行儀よく待たされます。本ガイドでは運用方法と、そのトランザクションを素早く見つける方法を扱います。

ネイティブかコンテナか

サービス ▸ Postgres は Homebrew と brew services のエントリでネイティブに導入し、ペインが起動・停止・リロードを扱います。1 つの PostgreSQL がマシンを担う場合はこれで十分です。

コンテナが真価を発揮するのはバージョンが必要なときです。PostgreSQL のメジャーアップグレードはダンプとリロードを要するため、移行中に 15 と 16 を並行稼働させることは実際に有用であり、ネイティブでは面倒でも、ポートの異なる 2 つのコンテナなら簡単です。

コンテナを作成する

Docker ペイン ▸ コンテナを作成…から PostgreSQL プリセットを選びます。内容は次のとおりです。

2 つ目のバージョンを並行稼働させるには、イメージ postgres:15、ホストポート 5433、そして別のボリューム名でもう一つコンテナを作成します。2 つのデータベースが競合せず、どちらも破棄できます。

実行前にコマンドを読む

シートは、パスワードをマスクした実際の docker run コマンドをプレビューします。読むか、スクリプトにコピーしてください。作成を押すと取得・作成・起動が行われ、Docker ペインにログとシェル付きで現れます。

リンク済みサーバ上でも

フリート内の任意のホストを対象にすれば、SSH 経由で同じコンテナがそこに作成されます。同一のデータベースをステージング機に、手順を繰り返さず立ち上げるのに便利です。

バックエンドを読む

データベースヘルスは、各バックエンドの状態、実行中のクエリ、その継続時間を一覧表示します。重要な状態は idle in transaction(トランザクションを開いたまま離席したクライアントで、その間ロックを保持し続ける)と、ロック待ちのものです。pg_stat_activity のクエリを記憶から書き起こさずとも、ここに現れます。

明らかに原因であるバックエンドは、ペインから終了できます。実行前に確認します。

「なぜ遅い/固まっているのか」

診断は稼働中のサーバに対して実行されます。実行中のもの、何が誰にブロックされているか、接続上限までの余裕、そして無視できないほど長く開いているトランザクション。所見は重大度順に、原因のバックエンドと紐づけて返されます。つまり答えは「何かがロックを保持している」ではなく「11 分前に開かれたこのトランザクション」になります。

検査修復もここで実行でき、挙動と履歴ビューは、今この瞬間だけでなく推移を図示します。

AI 管理者に尋ねる

読み解く手間を省くこともできます。「Postgres サーバで書き込みがブロックされている。原因は?」。アシスタントが稼働中のサーバを検査し、平易に説明し、修正を提案します。承認なしに適用することはありません。

アプリ内のどこにあるか

実際の作業は データベース ▸ データベースヘルス ペインが担います。対象を選ぶと、稼働中の接続をすべて一覧表示し、注意すべきものを強調し、MySQL と PostgreSQL については、ログから推測するのではなく稼働中のサーバに対して「なぜ遅い/固まっているのか」を診断します。

データベースホストにエージェントをインストールする必要はありません。FrontierStack は既存の鍵を使って SSH でリンク済みサーバに接続し、データベース自身の管理インターフェース経由で読み取ります。

必要になる前にアラートを設定する

監視が役立つのは、壊れるの瞬間です。フリートにホストを追加し、データベースヘルスを向け、チェックを定期実行させます。停止したデータベースは「問題なし」ではなく「データなし」として現れるため、明示的なアラートこそが、静かな障害を実際に届く通知へと変えます。

すべてをひとつの Mac アプリで。

FrontierStack は、ローカルでもフリート全体でも、スタック全体のインストール・監視・保護をひとつのネイティブ macOS アプリで行います。

FrontierStack をダウンロード