- 安装步骤
1.1 下载相应扩展包
https://network.pivotal.io/products/vmware-tanzu-greenplum#/releases/1193700
1.2 上传并安装pljava-2.0.4-gp6-rhel7_x86_64.gppkg
[gpadmin@gp_master ~]$ gppkg -i pljava-2.0.4-gp6-rhel7_x86_64.gppkg
重启数据库
[gpadmin@gp_master ~]$ gpstop -r
1.3 对database安装实例
[gpadmin@gp_master ~]$ psql -d dbName -c 'CREATE EXTENSION pljava;'
报错:
1: ERROR: Cannot load libjvm.so library, check that it is available in LD_LIBRARY_PATH (Backend.c:243)
DETAIL: libjvm.so: cannot open shared object file: No such file or directory
2: ERROR: Cannot load libjvm.so library, check that it is available in LD_LIBRARY_PATH (Backend.c:243)
DETAIL: libjvm.so: cannot open shared object file: No such file or directory
3: ERROR: function java_call_handler() does not exist
4: ERROR: function javau_call_handler() does not exist
解决思路,没有libjvm.so包,将java的server下的包加载到环境变量中(root权限,所有节点都需配置)
[root@gp_master ~]$ echo "$JAVA_HOME/jre/lib/amd64/server" > /etc/ld.so.conf.d/libjdk1.8.0_311.conf
[root@gp_master ~]$ ldconfig
重新加载
[gpadmin@gp_master ~]$ psql -d dbName -c 'CREATE EXTENSION pljava;'
CREATE FUNCTION
说明:前置条件,安装jdk1.8, 之前安装jdk11,但是PLJava注册一直失败。可能是由于jdk11没有jre,我自己给jre 解出来的原因,后面有时间可以试一试JAVA_HOME=JDK11 ,echo “$JAVA_HOME/jre/lib/amd64/server” > /etc/ld.so.conf.d/libjdk1.8.0_311.conf
PG/Java安装完成
2.使用
2.1 将java程序进行打包,并将jar文件上传到Greenplum master主节点,通过主节点分发至所有节点。
运行gpscp实用程序将jar文件复制到Greenplum Java目录。 使用-f选项指定包含master节点和segment节点主机列表的文件。
[gpadmin@gp_master ~]$ gpscp -f hostfile_exkeys NGCustomerField.jar =:$GPHOME/lib/postgresql/java/
2.2 使用gpconfig程序设置Greenplumpljava_classpath服务器配置参数。 该参数列出已安装的jar文件。
[gpadmin@gp_master ~]$ gpconfig -c pljava_classpath -v ‘NGCustomerField.jar’
2.3 运行gpstop实用程序-u选项重新加载配置文件。
[gpadmin@gp_master ~]$ gpstop -u
2.4 以下SQL命令定义一个Java函数来测试jar文件中的方法:
create or replace function customerfield(jsonstr text,type text,field text)
RETURNS varchar
as ‘com.maycur.ng_udf.NGCustomerField.NGCustomerField’
LANGUAGE java;
SELECT set_config(‘pljava_classpath’, ‘NGCustomerField.jar’, false);
select customerfield(‘{“CF22”: {“currency”: “CNY”}, “CF79”: {“currency”: “CNY”}, “CF82”: {“currentTime”: 1600840217693}}’,‘DateTimeInput’,‘CF82’);