PostgreSQL拡張モジュールの多くは、PGXSと呼ばれる拡張向けの構築基盤を使用してビルドします。PGXSでビルドを実施すると、llvmに関連するファイルも生成されます。使用するllvmのバージョンに応じて、下記の手順を実施してください。
また、PGXSでビルドを実施した場合、ビルドされたバイナリにDT_RUNPATHが設定されます。これについて、“4.7.10.4 DT_RUNPATHの設定”を参照してください。
デフォルトのバージョンのllvmは、“2.1 前提基本ソフトウェア”のllvmの説明を参照してください。デフォルトのバージョンのllvmを使用する場合は、OSSのドキュメントに従って、OSSをビルドしてインストールしてください。
使用するバージョンのllvmに対応するMakefile.globalをスーパーユーザーでコピーします。下記は、llvmのバージョン9を使用する場合の例です。Makefile.globalは、Fujitsu Enterpirse Postgresの緊急修正を適用・削除した際に上書きされるため、この手順はビルドを実施するたびに実施してください。
$ su - Password:****** # cp /opt/fsepv<x>server64/lib/pgxs/src/Makefile.global-vsn9 /opt/fsepv<x>server64/lib/pgxs/src/Makefile.global
OSSのドキュメントに従って、OSSをビルドしてインストールしてください。
スーパーユーザーで以下のコマンドを実行します。下記は、llvmのバージョン9を使用する場合の例です。
$ su - Password:****** # mv /opt/fsepv<x>server64/lib/bitcode/<OSS名>* /opt/fsepv<x>server64/lib/bitcode-vsn9/
llvmを使用しない場合は、ビルドを実施する際に、下記のようにwith_llvm=noオプションをつけてビルドを実施してください。それ以外のオプションについては、OSSのドキュメントに従ってください。
# make USE_PGXS=1 with_llvm=no
DT_RUNPATHに設定される値は、デフォルトでは、<ビルド環境のFujitsu Enterprise Postgresのインストールディレクトリ>/lib、および、$ORIGIN/../libです。
ビルド環境と運用環境のFujitsu Enterprise Postgresのインストールディレクトリが同じ場合は、環境変数LD_LIBRARY_PATHに<運用環境のFujitsu Enterprise Postgresのインストールディレクトリ>/libを設定することなく、ビルドしたプログラムを実行できます。
ビルド環境と運用環境のFujitsu Enterprise Postgresのインストールディレクトリを同じ位置とできない、あるいは、運用環境のインストールディレクトリを事前に定められない場合は、以下のようにすることで、LD_LIBRARY_PATHに<運用環境のFujitsu Enterprise Postgresのインストールディレクトリ>/libを設定することなくビルドしたプログラムを実行できます。
DT_RUNPATH属性に、任意のパスを設定します。
運用環境にて、該当のパスに、<運用環境のFujitsu Enterprise Postgresのインストールディレクトリ>/libへのシンボリックリンクを作成してください。
このための、DT_RUNPATH属性の設定は、環境変数PG_LDFLAGS(注)にて設定してください。
上記の対応ができない場合、プログラムの実行時に、LD_LIBRARY_PATHに<運用環境のFujitsu Enterprise Postgresのインストールディレクトリ>/libを設定してください。
なお、環境変数LD_LIBRARY_PATHを設定した際の注意事項について、詳細は、“アプリケーション開発ガイド”の“共有ライブラリを利用するアプリケーションのビルド・実行方法”の“DT_RUNPATHが設定できない場合”を参照してください。
注) 詳細は、“PostgreSQL Documentation”の“Extension Building Infrastructure”を参照してください。例えば、“make USE_PGXS=1 PG_LDFLAGS=”-Wl,-rpath,’$$ORIGIN/../libdummy’,--enable-new-dtags”のように設定できます。