他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

31.4. 拡張性

31.4.1. 拡張のためのインライン展開サポート

PostgreSQLJIT実装は、Cinternal型の関数の本体をインライン展開できます。そうした関数に基づく演算子も同様です。 拡張の関数に同じことを行うには、関数の定義が入手可能である必要があります。 LLVM JITサポートがコンパイルされているサーバに対してPGXSを使って拡張をビルドする際に、関連するファイルは自動的にビルドされ、インストールされます。

関連するファイルは$pkglibdir/bitcode/$extension/に、そのサマリは$pkglibdir/bitcode/$extension.index.bcにインストールされなければなりません。 ここで、$pkglibdirは、pg_config --pkglibdirが返すディレクトリで、$extensionは拡張の共有ライブラリのベース名です。

注記

PostgreSQL自身に組み込まれた関数については、ビットコードが$pkglibdir/bitcode/postgresにインストールされます。

31.4.2. プラグ可能JITプロバイダ

PostgreSQLLLVMに基づいたJIT実装を提供します。 JITプロバイダのインタフェースはプラグ可能で、プロバイダは再コンパイルすることなく変更できます。(ただし今のところ、ビルドプロセスはLLVM用のインライン展開サポートデータのみを提供しています。) 有効なプロバイダはjit_providerの設定で選択できます。

31.4.2.1. JITプロバイダインタフェース

名前付きの共有ライブラリをロードすることにより、JITは動的にロードされます。 ライブラリを特定するために通常のライブラリサーチパスが使用されます。 必要なJITプロバイダコールバックを提供し、かつそのライブラリが実際にJITプロバイダであることを示すために、_PG_jit_provider_initという名前のC関数を提供する必要があります。 この関数には構造体が渡され、その構造体には各々の動作用のコールバック関数へのポインタが設定される必要があります。

struct JitProviderCallbacks
{
    JitProviderResetAfterErrorCB reset_after_error;
    JitProviderReleaseContextCB release_context;
    JitProviderCompileExprCB compile_expr;
};

extern void _PG_jit_provider_init(JitProviderCallbacks *cb);