PostgreSQL JAVA与SQL集成之PL/Java

PostgreSQL+ pljava

PL/Java 作为 PostgreSQL 的编程语言扩展之一,与 PL/pgSQL(PostgreSQL 原生的存储过程语言)相比,提供了 Java 语言特有的面向对象功能,并支持 Java 的标准库和第三方库。由于 Java 是一种跨平台的语言,这意味着在使用 PL/Java 时,开发者可以轻松利用 Java 现有的生态系统,如 Apache Commons、Spring Framework 或其他工具来处理数据库中的数据。

PL/Java 它允许使用 Java 编写用户定义的函数(UDF)。通过 PL/Java,用户可以在 PostgreSQL 内部运行 Java 代码,这为数据库操作提供了更多的灵活性和扩展性。

1.安装

postgresql 可以使用pg 16版本。

pljava最新的tag是v1.6.7

https://github.com/tada/pljava/tree/V1_6_7

java版本要求9+,如果是8版本会有编译问题。

安装好mvn、java之后便可以使用了。

1.1 postgresql 16.3源码安装

./configure --prefix=/home/admin/install/postgres --without-icu 
make -j8 install

然后将postgres/bin目录配置到path即可。

此时初始化数据库并启动即可。

initdb -D /usr/local/pgsql/data

然后:

psql -U postgres

https://www.postgresql.org/ftp/source/v16.3/

1.2 pljava安装

mvn clean package

67ac6ce059c3da585d719381f3dacd21.png

如果看到全部SUCCESS表示编译好了,此时安装pg extension。

cd pljava-packaging/target/
java -jar pljava-pg16.jar

看到install到pg安装目录,便成功。

[admin@i-7dwsk0ty target]$ java -jar pljava-pg16.jar
/home/admin/install/postgres/lib/libpljava-so-1.6.7.so as bytes
/home/admin/install/postgres/share/pljava/pljava-1.6.7.jar as bytes
/home/admin/install/postgres/share/pljava/pljava-api-1.6.7.jar as bytes
/home/admin/install/postgres/share/pljava/pljava-examples-1.6.7.jar as bytes
/home/admin/install/postgres/share/extension/pljava.control as lines (ASCII)
... 太多省略

1.3 配置jvm

在data目录的postgresql.conf配置文件中添加,然后重启数据库。

pljava.libjvm_location='/code/jdk-9.0.4/lib/server/libjvm.so'

2.使用

创建插件,如果现实如下则成功。

postgres=# CREATE EXTENSION pljava;
CREATE EXTENSION

此时便可以编写一个helloworld,例如:

package com.postgresql.pljava;

public class Hello {
    public static int test(Object data) throws Throwable {
        return 0;
    }
}

我们可以使用jar命令,生成jar包,例如:

javac Hello.java
jar -cvf Hello.jar com/postgresql/pljava/Hello.class

此时在psql里面去加载使用这个test函数。

postgres=# select sqlj.install_jar('file:///code/hashdata-lightning/Hello.jar', 'test', true);
 install_jar 
-------------
 
(1 row)

postgres=# select sqlj.set_classpath('public', 'test');
 set_classpath 
---------------
 
(1 row)

postgres=# CREATE OR REPLACE FUNCTION test(data anyelement)
RETURNS int
AS 'com.postgresql.pljava.Hello.test'
LANGUAGE java;
CREATE FUNCTION

此时测试这个:

gpadmin=# select test(1);
 test8 
-------
     0
(1 row)

一起探索更多C++项目/知识~

c38983d044b1ee365227a4511c073080.png

往期推荐:

向量数据库milvus源码剖析之开篇

热度更新,手把手实现工业级线程池

玩转cpp小项目星球3周年了!

3a4bdd25a0d41e3728c223f1c735fb44.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值