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
如果看到全部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++项目/知识~
往期推荐:
向量数据库milvus源码剖析之开篇
热度更新,手把手实现工业级线程池
玩转cpp小项目星球3周年了!