L'implémentation JIT de
PostgreSQL peut intégrer le corps des fonctions
de type C
et internal
, ainsi que les
opérateurs basés sur ces fonctions. Voir Section 31.1.2.
Pour le faire pour les fonctions au sein des extensions, la définition de
ces fonctions doit être disponible. En utilisant PGXS pour construire une extension pour un
serveur compilé avec le support JIT LLVM, les fichiers nécessaires seront
automatiquement installés.
Les fichiers adéquats doivent être installés dans
$pkglibdir/bitcode/$extension/
et un résumé de ceux-ci dans
$pkglibdir/bitcode/$extension.index.bc
, où
$pkglibdir
est le répertoire retourné par
pg_config --pkglibdir
et $extension
le nom (basename) de la librairie partagée de
l'extension.
Pour les fonctions construites dans PostgreSQL
même, le bitcode est installé dans
$pkglibdir/bitcode/postgres
.
PostgreSQL fournit une implémentation du JIT basée sur LLVM. L'interface au fournisseur du JIT est ouverte et le fournisseur peut être changé sans recompiler (bien qu'actuellement, le processus de construction fournit seulement des données de support pour LLVM). Le fournisseur actif est choisi par le GUC jit_provider.
Un fournisseur JIT est chargé en chargeant dynamiquement
la librairie partagée indiquée. Pour la situer, le chemin de recherche de
librairie habituel est utilisé. Pour fournir les callbacks du fournisseur
JIT et pour indiquer que la librairie est bien un fournisseur
JIT, cette dernière doit fournir une fonction C nommée
_PG_jit_provider_init
. À cette fonction est passée
une structure qui doit être remplie avec les pointeurs des fonctions
callback pour les différentes actions.
struct JitProviderCallbacks { JitProviderResetAfterErrorCB reset_after_error; JitProviderReleaseContextCB release_context; JitProviderCompileExprCB compile_expr; }; extern void _PG_jit_provider_init(JitProviderCallbacks *cb);