
2026/02/18 7:40
**pg_background** *PostgreSQLに重い処理を任せ、セッションは軽量に保ちます。*
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
pg_background は、クライアントセッションをブロックせずに専用のバックグラウンドワーカーで SQL を非同期実行できる PostgreSQL 拡張です。呼び出し側のトランザクションとは独立してコミットまたはロールバックする自律型トランザクションをサポートし、明示的なライフサイクル制御(launch, result, detach, cancel, wait)を提供します。
推奨される v2 API は
(pid, cookie) ハンドルを使用して PID の再利用を回避します。pg_background_stats_v2()、pg_background_progress()、および新しい pg_background_get_progress_v2() を通じて強化された監視機能が提供されます。ワーカーは max_worker_processes からエントリを消費するため、この GUC はクラスターサイズに合わせて調整する必要があります。
典型的な本番環境での利用例には、バックグラウンド VACUUM/ANALYZE/REINDEX、非同期データ補完または修復、ファイア―アンド‑フォーゲット監査/アウトボックス書き込み、および高価な処理を遅延させるワークフローが含まれます。最近のリリース(v1.6–v1.8)では拡張機能が安定化し、古い PostgreSQL バージョンへのサポートを削除、セキュアなクッキー生成(
pg_strong_random())、専用 WorkerInfoMemoryContext、指数バックオフのポーリング、NULL チェック、新しい統計/進捗関数、および Docker ベースの CI が追加されました。
既知の制限事項:Windows でのキャンセルは制限されています。COPY プロトコルは無効化されています;ワーカーはトランザクション内では実行できません。実践的なチェックリスト:
- v2 API を優先する
- detach は cancel と同じではないことを認識する
- 結果はすぐに消費または保存する
- セッションごとのワーカー上限とタイムアウトを設定する
- 進捗と統計を可観測性に利用する
の使用状況を監視するmax_worker_processes
pg_background は外部スケジューラなしでネイティブな非同期ジョブ機能を提供し、アプリケーションの応答性を向上させ、インフラストラクチャを簡素化し、PostgreSQL 内でワーカーリソースに対するオペレーターによる細かな制御を可能にします。
本文
pg_background – PostgreSQL の非同期 SQL 実行
pg_background とは(そして何ではないか)
- 目的:PostgreSQL 内のバックグラウンドワーカーで任意の SQL コマンドを非同期に実行する。
- スケジューラーやキューイングプラットフォームではない:単に SQL を走らせ、結果へのインタラクションは利用者が決定します。
本番環境で使う理由
pg_background は以下のシナリオで特に有効です。
| 機能 | メリット |
|---|---|
| ノンブロッキング操作 | クライアント接続を保持せずに長時間実行されるクエリを起動できます。 |
| 自律的トランザクション | 呼び出し元のトランザクションと独立してコミット/ロールバックが可能です。 |
| リソース分離 & クリーンアップ | ライフサイクルが明確:起動 → 結果取得 → 切り離し/キャンセル → 待機。 |
| サーバー側可観測性 | などでワーカーを一覧表示し、状態・エラーを検査できます(v2)。 |
典型的な本番パターン:
- バックグラウンドでの
VACUUM / ANALYZE / REINDEX - 非同期バックフィルやデータ修復
- 「Fire‑and‑forget」監査/アウトボックス書き込み
- OLTP が重いアプリで「高コスト処理を後回しにする」ワークフロー
推奨:v2 API(推奨)
プロジェクトは現在 v2 API を強く推奨しています。
(v2 は
(pid, cookie) ハンドルを使い、PID 再利用による誤動作を防ぎます。)
v2 の主な特徴
- Cookie ベースの識別
- 明示的キャンセル vs. 切り離し
- 同期待機
での監視強化list_workers()
語義注意:detach は cancel ではありません。
detach はワーカーの追跡を停止するだけで、実行自体は継続します。
インストールと運用ルール
- エクステンションをビルドしてインストール (
)。CREATE EXTENSION pg_background - 背景ワーカーは
を消費 するので、容量を意図的に設定してください。README に有効化手順と GUC の設定が記載されています。max_worker_processes
リリースハイライト(v1.6 → v1.8)
| バージョン | ハイライト |
|---|---|
| v1.6 (2026‑02‑05) | 本番安定化 + cookie ベースの v2 API 追加、DSM ライフサイクル改善、安全なエラーハンドリングとメモリクリーンアップ、診断機能向上。PostgreSQL 12–18 対応。 |
| v1.7 (2026‑02‑13) | セキュリティ&効率化:暗号学的に安全な cookie 生成 ()、 により長時間セッションの膨張防止、指数関数バックオフで待機/キャンセルループを最適化。NULL チェック改善。 |
| v1.8 (2026‑02‑13) | 運用制御&可観測性:統計・進捗関数 (, , )、新 GUC (, , )、Docker‑ベース CI リファクタリング、PostgreSQL 13 以前を非推奨化。 |
既知の制限事項:Windows のキャンセル上限、COPY プロトコルは意図的に無効、ワーカー内でのトランザクション制御は不可。
安全に利用するための実務チェックリスト
- v2 を使用してください(レガシー依存がなければ)。PID 再利用保護は価値があります。
は容量予算として扱い、背景作業が他と競合します。max_worker_processes- detach ≠ cancel:detach は追跡停止のみです。
- 一度きりの結果消費を想定し、必要なら結果を保存して再利用可能にしてください。
- v1.8+ の新しいノブ(GUC)を活用:セッションごとのワーカー数上限、タイムアウト設定、キューサイズの適切なメモリ割り当て。
- 進捗・統計関数で可観測性を高める。
終わりに
pg_background は PostgreSQL にクリーンかつ明示的な非同期実行レーンを提供します。v2 の安全ハンドル、v1.7 の強化された内部構造、v1.8 の運用・テレメトリ機能が揃い、VACUUM ジョブやバックフィル、自律トランザクションパターン、非同期 ETL などのユースケースに最適です。もしご自身の環境でこれらの用途を検討されている場合は、お気軽にお知らせください。v2 API を用いた本番向けパターンとガードレールをご提案します。