当前位置: 首页 > article >正文

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


http://www.kler.cn/a/313912.html

相关文章:

  • 什么是RAG? LangChain的RAG实践!
  • Systemd: disable和mask的区别
  • AI写作(二)NLP:开启自然语言处理的奇妙之旅(2/10)
  • 图论基本术语
  • Nebula NGQL语言的使用 一
  • 软件工程的基础和核心理论概念
  • 科研绘图系列:R语言散点图和小提琴图(scatter plot violin plot)
  • 【ORACLE】客户端或plsql无法连接Oracle问题之一
  • 基于A2C与超启发式的航天器星载自主任务规划算法-笔记
  • 大数据新视界 --大数据大厂之JavaScript在大数据前端展示中的精彩应用
  • Vue 修饰符 | 指令 区别
  • C/C++笔记
  • python基础题练习
  • leetcode 605.种花问题
  • 青岛特某电新能源有限公司-充电业务流程及数据交互规范-集控前置-精简版V1.0
  • Debian 12上安装google chrome
  • 前端vue-自己封装组件并使用三步走
  • k8s pod网络故障注入,命令行实现
  • 功能强大的任务 / 项目管理工具GoodTask for Mac
  • Redis 集群搭建教程
  • leetcode刷题(71-75)
  • ATMEGA328P芯片引脚介绍
  • 如何配置ssh key 到gitlab, 实现git push
  • 京东商品属性的详细api数据解析:颜色、尺寸与材质
  • 《深度学习》PyTorch框架 优化器、激活函数讲解
  • OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(下)