?彭冲?数据和云
墨墨导读:本文介绍PostgreSQL里如何使用pljava扩展支持java编程。
系统环境
Centos7.6 x86_64
安装java 8
yum?install?java-1.8.0-openjdkyum?install?java-1.8.0-openjdk-devel
下载解压maven
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -zxvf apache-maven-3.6.3-bin.tar.gz
./apache-maven-3.6.3/bin/mvn --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/postgres/apache-maven-3.6.3
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
使用maven编译pljava-1.5
PL/Java brings functions, triggers, and types in Java. The 1.5 series supports legacy applications, with PostgreSQL support extending from 13 back to 8.2, and Java from 14 back to 8 (7 or 6 with some extra build effort).
wget https://github.com/tada/pljava/archive/V1_5_7.tar.gz
tar zxvf V1_5_7.tar.gz
cd pljava-1_5_7/
/home/postgres/apache-maven-3.6.3/bin/mvn -Dpgsql.pgconfig=/opt/pg125/bin/pg_config clean install
安装pljava-pg.jar文件
java?-Dpgconfig=/opt/pg125/bin/pg_config?\-jar?pljava-packaging/target/pljava-pg12.5-amd64-Linux-gpp.jar
数据库超级用户设置java动态库文件
alter?database?postgres?set?pljava.libjvm_location=‘/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre/lib/amd64/server/libjvm.so‘;
也可以使用alter system设置全局变量,需要永久设置。
数据库超级用户创建pljava扩展
create?extension?pljava?;
可选设置pljava.vmoptions,可配置vm相关参数,比如内存参数等。
超级用户配置普通用户pljava权限
pljava扩展新增了两种pg_language:java和javau
javau只能被超级用户使用
java可以被授权普通用户使用
postgres=#?create?user?java;CREATE?ROLEpostgres=#?create?schema?java?authorization?java;CREATE?SCHEMApostgres=#?grant?USAGE?on?LANGUAGE?java?to?java;GRANTpostgres=#?grant?usage?on?SCHEMA?sqlj?to?java;GRANT
普通用户使用pljava
测试pljava环境是否成功
psql -p5432 -Ujava postgres
CREATE FUNCTION getsysprop(VARCHAR) RETURNS VARCHAR
?AS ‘java.lang.System.getProperty‘
?LANGUAGE java;
postgres=> SELECT getsysprop(‘user.home‘);
? getsysprop ?
----------------
/home/postgres
(1 row)
上面输出测试成功
提前上传编写好的jar文件test.jar到/opt下,里面有个简单方法hello
1. 注册安装jar文件
select?sqlj.install_jar(‘file:///opt/test.jar‘,?‘myjar‘,?true);
上面myjar是自定义jar名称
2. 设置classpath,jvm执行时查找jar的路径
select?sqlj.set_classpath(‘java‘,?‘myjar‘);
第一个参数是schema,第二个是上面自定义的jar名称
3.检查classpath下是否有刚才注册的jar
postgres=>?select?sqlj.get_classpath(‘java‘);?get_classpath?---------------?myjar(1?row)
根据schema名称查询classpath下有哪些自定义jar
4.创建pljava函数
CREATE?FUNCTION?java.hello(varchar)?RETURNS?varchar??AS?‘com.test.Hello.hello‘??LANGUAGE?java;
5.调用pljava函数
postgres=>?select?hello(‘PostgreSQL?12‘);?????????hello-----------------------?Hello,?PostgreSQL?12!(1?row)
6.更新jar代码
当修改了jar文件内容,或者jar路径有变化可以更新注册的jar
select?sqlj.replace_jar(‘file:///opt/test.jar‘,?‘myjar‘,?true);
7. 卸载jar包
如果不使用需要卸载jar,先删除pljava函数,再删除注册的jar
drop function java.hello(varchar);
select?sqlj.remove_jar(‘myjar‘,?true);
参考链接:https://github.com/tada/pljava
墨天轮原文链接:https://www.modb.pro/db/43371(复制到浏览器中打开或者点击“阅读原文”立即查看)