HN 日本語サマリー

← 一覧へ戻る
インフラ・DevOps

Show HN: Pglayers – スタック可能なDockerレイヤーとしてのPostgreSQL拡張機能

Show HN: Pglayers – PostgreSQL extensions as stackable Docker layers (github.com)

24 pointsby iemejia3 コメント

要約

Pglayersは、PostgreSQLの公式Dockerイメージに拡張機能を簡単に追加できるようにするツールです。通常、PostgreSQLの拡張機能は手動でのインストールやコンパイルが必要ですが、Pglayersは各拡張機能を最小限のDockerイメージレイヤーとして提供し、`COPY --from`コマンドで既存のPostgreSQLイメージに積み重ねるだけで利用できます。これにより、PostGIS、pgvector、pg_cronなどの多様な拡張機能を簡単にカスタムイメージに追加し、開発およびテストプロセスを効率化できます。

全文翻訳

pglayers 公式のPostgreSQL Dockerイメージは拡張機能なしで提供されます。pgvector、PostGIS、またはpg_cronが必要になるたびに、手動で依存関係をインストールしたり、ソースからコンパイルしたり、固定された拡張機能のセットをバンドルするサードパーティのイメージに甘んじたりすることになります。pglayersはこれを解決します。これは、拡張機能がプリインストールされたすぐに使えるPostgreSQLディストリビューションであると同時に、公式のpostgres Dockerイメージをベースにして、必要な拡張機能だけを含む独自のカスタムイメージを構築するためのツールでもあります。PostgreSQL拡張機能の構築方法、依存関係のインストール方法、コンパイラのセットアップ方法を考える必要はありません。各拡張機能は、そのバイナリのみを含む最小限のDockerイメージレイヤーとして公開されています。公式のpostgresイメージの上に`COPY --from`を使用してそれらを積み重ねます — 拡張機能ごとに1行、コンパイルは不要です。 クイックスタート オプション1: すぐに使えるイメージ `shared_preload_libraries`がすでに設定されている、事前ビルドされた結合イメージ: ```bash # 全53拡張機能 docker run -d -e POSTGRES_PASSWORD=secret ghcr.io/pglayers/pglayers-full:17 # Azure Database for PostgreSQL互換 (28拡張機能) docker run -d -e POSTGRES_PASSWORD=secret ghcr.io/pglayers/pglayers-azure:17 ``` 利用可能なプロファイル: full、azure。それぞれPG 17、18、19用に公開されています。詳細とカスタムプロファイルの作成方法については、[プロファイル](#profiles)を参照してください。 注: ベンダープロファイル(例: azure)は、ローカル開発のためのベストエフォートな近似値です。実際のマネージドサービスに代わるものではありません — 拡張機能のバージョン、構成のデフォルト値、プラットフォーム固有の動作が異なる場合があります。これらはローカルで開発およびテストするために使用し、本番環境を正確に複製するためには使用しないでください。 オプション2: 独自の拡張機能を選択する 各拡張機能は独自のイメージレイヤーとして公開されています。これらを`COPY --from`を使用して公式のpostgresイメージに積み重ねます — 各行は最終イメージに1つの拡張機能を追加します: ```dockerfile FROM postgres:17 COPY --from=ghcr.io/pglayers/pgx-pgvector:17 / / COPY --from=ghcr.io/pglayers/pgx-pg_cron:17 / / COPY --from=ghcr.io/pglayers/pgx-postgis:17 / / ``` ビルドして実行: ```bash docker build -t my-postgres . docker run -d -e POSTGRES_PASSWORD=secret my-postgres ``` コンパイルは行われません — Dockerはレジストリから事前にビルドされた拡張機能レイヤーをプルし、それらを公式イメージにオーバーレイします。その結果、選択した拡張機能のみを含む単一のイメージがレイヤーごとに構成されます。 Dockerを初めて使用しますか?コンテナが実行されているかを確認し、ポートの競合を処理する方法については、[コンテナの検証](#verifying-your-container)を参照してください。 サポートされているPostgreSQLバージョン バージョン | ステータス ---|--- PostgreSQL 17 | 安定版 PostgreSQL 18 | 安定版 PostgreSQL 19 | 実験版 (ベータ版 — 正式リリースまでサポート) すべての拡張機能はPG 17および18に対してビルドされ、テストされています。PG 19のサポートは、ベータ版である間はベストエフォートであり、一部の拡張機能はまだアップストリームの互換性がない場合があります。PG 19がGAに達すると、安定版に昇格されます。 利用可能な拡張機能 拡張機能 | バージョン | PGバージョン | 説明 ---|---|---|--- age | 1.7.0-rc0 | 17, 18 | openCypherクエリ言語を備えたグラフデータベース (Apache AGE) anon | 3.1.1 | 17, 18 | データ匿名化およびマスキング credcheck | 5.0 | 17, 18, 19 | ユーザー作成時/パスワード変更時の認証情報チェック documentdb | 0.113-0 | 17, 18 | MongoDB互換のドキュメントデータベースエンジン (BSONタイプとCRUD API) h3-pg | 4.2.3 | 17, 18 | Uber H3六角形地理空間インデックス hll | 2.21 | 17, 18, 19 | HyperLogLog確率的ユニークカウント http | 1.7.1 | 17, 18, 19 | PostgreSQL用HTTPクライアント (SQLからのWebリクエスト) hypopg | 1.4.3 | 17, 18, 19 | What-if分析のための仮説インデックス ip4r | 2.4.3 | 17, 18, 19 | GiSTインデックス付きIPv4/IPv6レンジデータ型 orafce | 4.16.7 | 17, 18, 19 | Oracle互換関数およびパッケージ pgaudit | 17.1 | 17, 18 | 監査ログ (セッションおよびオブジェクトレベル) pg_bigm | 1.2 | 17, 18 | 2-gram全文検索 (CJK言語に最適) pg_cron | 1.6.7 | 17, 18 | ジョブスケジューラ (データベース内の定期的ジョブ) pg_duckdb | 1.1.1 | 17, 18 | Postgresに埋め込まれたDuckDBカラム型分析エンジン pg_durable | 0.2.3 | 17, 18 | データベース内永続実行 (フォールトトレラントなワークフロー) pg_failover_slots | 1.2.1 | 17, 18 | フェールオーバー用の論理レプリケーションスロットマネージャ pg_graphql | 1.6.1 | 17, 18 | PostgreSQL用GraphQLサポート pg_hashids | 1.2.1 | 17, 18, 19 | 整数から短いユニークハッシュIDを生成 pg_hint_plan | 1.7.1 | 17, 18 | SQLコメント内のヒントを使用して実行プランを調整 pg_ivm | 1.13 | 17, 18 | マテリアライズドビューのインクリメンタルビューメンテナンス pg_jsonschema | 0.3.4 | 17, 18 | JSONスキーマ検証 pg_net | 0.20.3 | 17, 18, 19 | 非同期非ブロックHTTP/HTTPSリクエスト pg_partman | 5.4.3 | 17, 18, 19 | 自動テーブルパーティション管理 pg_qualstats | 2.1.4 | 17, 18, 19 | WHERE句述語の統計コレクタ pg_repack | 1.5.3 | 17, 18, 19 | 重いロックなしでのオンラインテーブル再編成 pg_roaringbitmap | 1.1.0 | 17, 18 | 高速セット操作用のRoaringビットマップデータ型 pg_similarity | 1.0 | 17, 18 | 類似性関数 (Levenshtein, Jaro-Winkler, Cosine, Jaccard) pg_squeeze | 1.9.3 | 17, 18, 19 | 重いロックなしでテーブルから未使用スペースを削除 pg_stat_monitor | 2.3.2 | 17, 18 | ヒストグラムとバケットによる拡張クエリ統計 pg_textsearch | 1.3.1 | 17, 18 | BM25関連度ランク付き全文検索 pg_uuidv7 | 1.7.0 | 17, 18, 19 | UUIDv7生成 (時間順ソート可能なユニーク識別子) pg_wait_sampling | 1.1.9 | 17, 18, 19 | 待機イベントのサンプリングベース統計 pgfincore | 1.4.0 | 17, 18, 19 | データファイル用のOSページキャッシュを検査および管理 pgjwt | master | 17, 18, 19 | JSON Web Token (JWT) 生成および検証 pglogical | 2.4.7 | 17, 18, 19 | パブリッシュ/サブスクライブモデルを使用した論理ストリーミングレプリケーション pgrouting | 4.0.1 | 17, 18, 19 | PostGIS上の地理空間ルーティングおよびネットワーク分析 pgsodium | 3.1.11 | 17, 18, 19 | libsodiumを使用したモダンな暗号化 pgtap | 1.3.4 | 17, 18, 19 | PostgreSQL用ユニットテストフレームワーク pgtt | 4.5 | 17, 18, 19 | Oracleスタイルのグローバル一時テーブル pgvector | 0.8.3 | 17, 18, 19 | AI/埋め込み用のベクトル類似性検索 plpgsql_check | 2.9.1 | 17, 18, 19 | PL/pgSQLリンターおよびバリデーター plprofiler | 4.2.5 | 17, 18 | PL/pgSQL関数用パフォーマンスプロファイラ plv8 | 3.2.4 | 17, 18 | JavaScript (V8) 手続き型言語 PostGIS | 3.6.4 | 17, 18, 19 | 地理空間拡張機能 (ジオメトリ、ジオグラフィー、ラスタ、MVT) postgres_protobuf | 0.3.2 | 17, 18, 19 | Protocol Bufferサポート (クエリ、JSONとの変換) prefix | 1.2.11 | 17, 18, 19 | 電話ルーティングルックアップ用のプレフィックスレンジデータ型 rum | 1.3.15 | 17, 18 | 全文検索用の順序付け付きGINライクインデックス semver | 0.41.0 | 17, 18, 19 | セマンティックバージョンデータ型 tdigest | 1.4.3 | 17, 18, 19 | クォンタイルおよびパーセンタイル推定用のT-ダイジェスト tds_fdw | 2.0.5 | 17, 18 | SQL ServerおよびSybase用外部データラッパー temporal_tables | 1.2.2 | 17, 18 | システム期間テンポラルテーブル timescaledb | 2.28.1 | 17, 18 | 時系列ハイパーテーブル、圧縮、連続集計 wal2json | 2.6 | 17, 18 | 論理レプリケーション/CDC用JSON出力プラグイン wrappers | 0.6.2 | 17, 18 | 外部データラッパーフレームワーク (Stripe, S3, Firebaseなど) イメージタグ 各拡張機能は、2つのタグ形式で公開されています。 * `pgx-<extension>:<pg_major>` -- 最新ビルド (例: `pgx-pgvector:17`) * `pgx-<extension>:<pg_major>-<version>` -- 固定バージョン (例: `pgx-pgvector:17-v0.8.3`) すべてのイメージはマルチアーキテクチャ (linux/amd64およびlinux/arm64) であり、GHCRの`ghcr.io/pglayers/pgx-*`でホストされています。Dockerはプラットフォームに応じて正しいアーキテクチャを自動的にプルします。 構成に関する注意点 shared_preload_libraries 一部の拡張機能では、`shared_preload_libraries`にエントリが必要です。`COPY`行の後にこれをDockerfileに追加します: ```dockerfile RUN echo "shared_preload_libraries = 'pg_cron,pgaudit,pg_partman_bgw'" \ >> /usr/share/postgresql/postgresql.conf.sample ``` これが必要な拡張機能: 拡張機能 | ライブラリ名 ---|--- age | age anon | anon credcheck | credcheck pg_cron | pg_cron pg_duckdb | pg_duckdb pg_durable | pg_durable pg_failover_slots | pg_failover_slots pg_hint_plan | pg_hint_plan pg_net | pg_net pg_partman | pg_partman_bgw pg_qualstats | pg_qualstats pg_squeeze | pg_squeeze pg_stat_monitor | pg_stat_monitor pg_textsearch | pg_textsearch pg_wait_sampling | pg_wait_sampling pgaudit | pgaudit pglogical | pglogical pgsodium | pgsodium pgtt | pgtt plprofiler | plprofiler timescaledb | timescaledb CREATE EXTENSION 拡張機能は、使用したい各データベースで作成する必要があります。これを初期化スクリプトで自動化できます: ```bash COPY <<'EOF' /d ```