概要
Greenplum Database(GPDB)は PostgreSQL をベースとしており、多くの PostgreSQL 拡張機能との互換性があります。これにより、pg_trgm(類似度検索)、zhparser(中国語全文検索)、fuzzystrmatch(文字列距離計算)、roaringbitmap(ビットマップ演算)などの有用な拡張を活用できます。本記事では、Greenplum クラスタに拡張プラグインを導入・管理する手順を解説します。
拡張の確認
既にインストール済みの拡張一覧
現在データベースにロードされている拡張を確認するには、pg_extension システムビューを参照します:
SELECT extname, extversion FROM pg_extension;
デフォルトでは plpgsql や plpythonu などが有効になっている場合があります。
利用可能な拡張の一覧
インストール可能な拡張のリストは以下のクエリで取得できます:
SELECT name, default_version, comment FROM pg_available_extensions;
このリストには Greenplum 固有の拡張(例: gp_sparse_vector, diskquota)も含まれます。
拡張の詳細情報
各拡張のバージョンや依存関係、スーパーユーザー要否などを確認するには:
SELECT name, version, installed, requires FROM pg_available_extension_versions;
拡張のインストール手順
組み込み拡張の有効化
pg_available_extensions に存在する拡張は、単に CREATE EXTENSION コマンドで有効化できます:
CREATE EXTENSION fuzzystrmatch;
外部拡張のインストール
組み込みリストにない拡張(例: roaringbitmap)を追加する場合は、ソースからコンパイルしてインストールする必要があります。
1. 拡張ソースの取得
Greenplum 公式リポジトリから該当バージョンのソースコードをダウンロードします:
wget https://github.com/greenplum-db/gpdb/archive/refs/tags/6.18.2.tar.gz
tar -zxvf 6.18.2.tar.gz
2. 拡張ディレクトリへのコピー
目的の拡張(例: pg_trgm)を Greenplum の拡張ディレクトリにコピーします:
cp -r gpdb-6.18.2/contrib/pg_trgm $GPHOME/share/postgresql/contrib/
3. コンパイルとインストール
gpadmin ユーザーで以下のコマンドを実行します:
cd $GPHOME/share/postgresql/contrib/pg_trgm
make USE_PGXS=1 && make USE_PGXS=1 install
USE_PGXS=1 を指定しないと、Makefile.global が見つからないというエラーが発生します。
4. インストールの検証
正常にインストールされると、$GPHOME/share/postgresql/extension/ 配下に .control および .sql ファイルが生成されます。また、pg_available_extensions にも表示されるようになります。
5. セグメントノードへの展開
クラスタ構成の場合、すべてのセグメントノードにも同様の拡張ファイルを配置・コンパイルする必要があります。以下のように gpscp と gpssh を使用して一括処理できます:
# マスターノードで拡張を圧縮
cd $GPHOME/share/postgresql/contrib
tar -czvf pg_trgm.tar.gz pg_trgm
# セグメントノードに転送
gpscp -f seghosts pg_trgm.tar.gz=:$GPHOME/share/postgresql/contrib/
# セグメントノードで展開・インストール
gpssh -f seghosts <<'EOF'
cd $GPHOME/share/postgresql/contrib
tar -zxvf pg_trgm.tar.gz
cd pg_trgm
make USE_PGXS=1 && make USE_PGXS=1 install
EOF
6. データベースへのロード
全ノードへのインストール完了後、データベース内で拡張を有効化します:
CREATE EXTENSION pg_trgm;
拡張の使用例
pg_trgm を有効化した後は、以下のように類似度関数を使用できます:
SELECT show_trgm('Greenplum is awesome!');
-- 結果: {" gr","ree","een","enp","npl","plu","lum","um ",...}
拡張の削除と更新
削除
DROP EXTENSION pg_trgm;
更新またはスキーマ変更
ALTER EXTENSION pg_trgm UPDATE TO '1.2';
ALTER EXTENSION pg_trgm SET SCHEMA utils;
よくある問題と対処法
Makefile.global が見つからない
原因: USE_PGXS=1 を指定せずに make を実行。
対処: 常に make USE_PGXS=1 を使用。
gcc がインストールされていない
対処:
sudo yum install gcc gcc-c++ make
gp コマンドが認識されない
原因: 環境変数 GPHOME が正しく設定されていない可能性あり。
確認方法:
echo $GPHOME
env | grep GPHOME
修正: ~/.bash_profile に正しいパスを設定し、再読み込み:
export GPHOME=/opt/gpdb
source ~/.bash_profile
参考リソース
- Greenplum 標準拡張一覧: GitHub - gpdb/contrib
- RoaringBitmap for GPDB: gpdb-roaringbitmap
- 阿里云 RDS PostgreSQL 拡張ドキュメント: Alibaba Cloud Docs