1.6K Views
July 04, 24
スライド概要
47回 PostgreSQLアンカンファレンスのスライド資料
https://pgunconf.connpass.com/event/321576/
PostrgeSQL 拡張モジュール の Windows版 について
I am an engineer mainly dealing with PostgreSQL.
PostgreSQL拡張の Windowsバイナリ配布 はじめました(半年前から) 2024/7/1 PostgreSQLアンカンファレンス 高塚 遥 [email protected]
よく使われる拡張(1) 拡張 = PostgreSQLに機能追加するソフトウェア • pg_hint_plan • SQLにプランナヒントを付ける • OracleでSQLチューニングによく使われている機能 • pg_dbms_stats • プランナ統計を固定化する • これも Oracle で SQLチューニングによく使われている • pg_repack • VACUUM FULL(データ肥大化解消)を長時間ロック保持することなく実現 • pgaudit • 細かな条件指定で監査ログを取得する • PostGIS • 地理情報むけのデータ型・演算子・関数のコレクション
よく使われる拡張(2) • pg_bigm • Nグラム型全文検索 • pg_bulkload • 高速データローディング • orafce • Oracle互換の関数・演算子・データ型のコレクション • pg_statsinfo • 時系列稼働情報収集 → これらを Windows上で使う簡単な手段がなかった • PowerGres on Windows に pg_ivm、PostGIS、pg_bigm、textsearch_ja が付属 • PostGIS は EDB社がスタックビルダで配布
使えない理由 • 多くの場合 「公式 Windowsバイナリが配布されていない」 だけ • やればできる • ソースコード内に MSVCプロジェクトファイルや説明があるものも • 実現する機能自体が Linux固有でなければ、Windowsでも動作するはず • pg_statsinfo はこの理由で NG • PostgreSQL API を呼ぶだけで完結している拡張は基本的に対応可能 • 拡張なのでターゲットの PostgreSQLバイナリに合わせてビルド • 主流は EDB社がビルドした PostgreSQLインストーラ または zipセット • これは Microsoft Visual Studio C/C++ (MSVC) でビルドされている
MSVCビルド方法のポイント • 基本は PostgreSQL wiki に書いてある • https://wiki.postgresql.org/wiki/Building_and_Installing_PostgreSQL_Extension_Modules • 様々な工夫と注意点 • エクスポート指定にはモジュール定義ファイル(.def)を使用 • 元ソースに触れずにビルド可能にするため • プリプロセッサ定義 no_init_all=deprecated; • 4703 (未使用要素) や 4996 (非推奨関数) の警告を無視する指定 • ターゲット外の .c ファイルに注意 • wingdi.h を書き換えを要する pg_bulkload と pg_repack • VCだとマクロ展開に失敗するケース • 元コード修正が必要なケース • VCビルドで顕在化したバグ
実施したこと • 主要PostgreSQL拡張について調査 • 公式にWindows対応されているか、過去においてされていたか? • VC ビルド可能か? 動作可能か? • 大幅修正や仕様変更を必要とするか? • SRAOSSで継続バイナリリリースするものを選定 • pg_hint_plan、 pgaudit、 pg_repack、 pg_dbms_stats • ニーズと対応の容易さで選定 • 2024年1月から、サポート顧客向けにサポートシステムで配布 • ソースコードのライセンスそのまま • 一般むけに配布も計画中 (マーケティング的な入力依頼あるかも)