PL/Java的安装及使用

本文档详细介绍了在Greenplum数据库上安装和配置PL/Java的步骤,包括下载扩展包,安装libjvm.so,设置环境变量,创建数据库实例,以及如何分发和使用Java程序。在遇到libjvm.so找不到的问题时,通过添加JAVA_HOME到LD_LIBRARY_PATH解决了问题。最后,展示了如何定义和执行Java函数。
摘要由CSDN通过智能技术生成
  1. 安装步骤
    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’);
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值