postgresql 中调用 java 函数过程

注册入口

CREATE FUNCTION sqlj.java_call_handler()
RETURNS language_handler AS ‘pljava’
LANGUAGE C;

注册入口函数在 pljava 文件夹下

创建language

CREATE TRUSTED LANGUAGE java HANDLER sqlj.java_call_handler;
调用 CreateProceduralLanguage,会在 pg_language 表中插入语言信息

创建 java 过程

CREATE FUNCTION sqlj.install_jar(VARCHAR, VARCHAR, BOOLEAN) RETURNS void
AS ‘org.postgresql.pljava.management.Commands.installJar’
LANGUAGE java SECURITY DEFINER;

注册这个 java 类到 pg_proc 表上

使用 java 过程

当调用
select sqlj.install_jar(…);
,时
就会以调用linux系统函数 dlsym 在 pljava 文件夹下找 org.postgresql.pljava.management.Commands.installJar 这个类

然后调用 _PG_init 根据 initsequencer 函数中的状态机一步步添加参数、注册信号处理函数、创建虚拟机,并执行类:在这里插入图片描述
当有信号从虚拟机中传回时就执行相应的 handler