PostgreSQL JAVA与SQL集成之PL/Java

ops/2024/9/23 2:31:27/

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.安装

sql>postgresql 可以使用pg 16版本。

pljava最新的tag是v1.6.7

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

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

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

1.1 sql>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.sql>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目录的sql>postgresql.conf配置文件中添加,然后重启数据库

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

2.使用

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

postgres=# CREATE EXTENSION pljava;
CREATE EXTENSION

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

package com.sql>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/sql>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.sql>postgresql.pljava.Hello.test'
LANGUAGE java;
CREATE FUNCTION

此时测试这个:

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

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

c38983d044b1ee365227a4511c073080.png

往期推荐:

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

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

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

3a4bdd25a0d41e3728c223f1c735fb44.jpeg


http://www.ppmy.cn/ops/113943.html

相关文章

《MmAP : Multi-Modal Alignment Prompt for Cross-Domain Multi-Task Learning》中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要1 引言2 相关工作3 方法3.1对比图像预训练3.2 多模式对齐提示3.3 多任务提示学习框架 4 实验4.1基准设置4.2实验结果4.3消融研究 5、结论 摘要 多任务学习(Multi-Task Learning,MTL)是为了同…

Linux基本命令(初学者必备)

ubuntu下载软件工具的命令 更新软件源 sudo apt-get update 下载软件 sudo apt-get install 软件的名字 下载vim sudo apt-get install vim 在linux中写代码 1. 打开ubuntu上的shell终端 快捷键:ctrlaltt或者双击terminal图标 2. 打开或者新…

一、机器学习算法与实践_03概率论与贝叶斯算法笔记

1、概率论基础知识介绍 人工智能项目本质上是一个统计学项目,是通过对 样本 的分析,来评估/估计 总体 的情况,与数学知识相关联 高等数学 ——> 模型优化 概率论与数理统计 ——> 建模思想 线性代数 ——> 高性能计算 在机器学…

Git的基本操作

Git的基本操作 配置 常用: name email 表示是追溯到具体那个用户对代码的修改 # 配置全局用户名git config --global user.name "Your Name" # 配置全局用户邮箱git config --global user.email "emailexample.com"# 配置全局颜…

virtualbox中的网络模式,网络设置,固定IP

virtualbox关于网络设置的文档:https://www.virtualbox.org/manual/topics/networkingdetails.html#networkingdetails DHCP Dynamic Host Configuration Protocol:动态主机配置协议,是专门用来给网络中的节点分发IP地址,确保每…

Kubernetes集群部署(kubernetes)

三台主机恢复到docker快照状态; 检查驱动器类型为sytemd; 设置各个节点的主机名; 然后同步会话,修改hosts文件; 在k8s运行过程中不建议使用交换分区; 关闭交换分区; 但是这种方法是临时性的&am…

go语言 结构体

结构体类型别名和自定义类型 自定义类型 类型别名结构体创建结构体实例访问结构体字段修改结构体字段嵌套结构体结构体方法结构体内存布局 空结构体 题 关于 range 循环的陷阱构造函数方法 和 接收者定义方法 什么时候应该使用指针类型接收者任意类型添加方法 结构体的匿名字段…

druid jdbc 执行 sql 输出 开销耗时

druid 执行sql输出 参考链接配置_LogFilter alibaba/druid Wiki GitHub 看不太懂的往这里瞅瞅。 1. 别名映射 这个地方 给我们提供了 5 种 logfilter : log4j、log4j2、slf4j、commonlogging和commonLogging 每一种实际上都代表一个日志框架 或 日志门面。 -Ddruid.fil…