打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PostgreSQL如何使用PLJava支持Java编程

墨墨导读:本文介绍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 --versionApache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)Maven home: /home/postgres/apache-maven-3.6.3Java 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/jreDefault locale: en_US, platform encoding: UTF-8OS 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(复制到浏览器中打开或者点击“阅读原文”立即查看)

作者

彭冲,云和恩墨PG技术顾问(网名:多米爸比),PG社区认证专家,中国首批PostgreSQL ACE伙伴多年从事基于PostgreSQL数据库的软件研发,擅长于PL/PGsql业务迁移及优化,Oracle到PostgreSQL的迁移升级,异构数据库整合;作为墨天轮PostgreSQL专栏作者,热衷于PostgreSQL实践技术分享,在自己的岗位积极推广PostgreSQL,致力为PG社区多做奉献。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[WIKI]使用Confluence安装和配置WIKI说明
安装Maven
如何在Ubuntu16.04上安装SonarQube?
Linux平台jsp环境搭建(Tomcat4+jdk+postgreSQL7.4)
实现maven管理的Javaweb项目的proguard代码混淆功能
maven常用命令介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服