暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

PostgreSQL使用PLJava

原创 多米爸比 2021-01-06
4295

参考链接:https://github.com/tada/pljava

系统环境

Centos7.6 x86_64

安装java 8

yum install java-1.8.0-openjdk
yum 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 ROLE
postgres=# create schema java authorization java;
CREATE SCHEMA
postgres=# grant USAGE on LANGUAGE java to java;
GRANT
postgres=# 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);

保持联系

从2019年12月开始写第一篇文章,分享的初心一直在坚持,本人现在组建了一个PG乐知乐享交流群,欢迎关注我文章的小伙伴进群吹牛唠嗑,交流技术,互赞文章。

123.png

如果群二维码失效可以加我微信。

456.png

最后修改时间:2022-10-23 10:28:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论