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.xdnf.cn/news/1540739.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

企业搭建VR虚拟展厅,如何选择搭建平台?

选择虚拟展厅搭建平台时,需要综合考虑多个因素以确保平台能够满足您的具体需求并提供高质量的展示效果。以下是一些关键的选择标准: 1. 技术实力与创新能力 技术平台选择:确保平台支持虚拟现实(VR)、增强现实&#xf…

Qt clicked()、clicked(bool)、toggled(bool)信号的区别和联系

clicked() 信号 所属控件:clicked()信号是QAbstractButton类(及其子类,如QPushButton、QRadioButton、QCheckBox等)的一个信号。clicked信号可以说是许多控件(特别是按钮类控件,如QPushButton)…

基于lnmp搭建wordpress

一、案例目标 (1)了解LNMP环境的组成。 (2)了解LNMP环境的部署与安装。 (2)了解WordPress应用的部署与使用。 二、节点规划 IP 主机名 节点 192.168.200.20 lnmp lnmp服务节点 三、案例实施 LN…

C#基于SkiaSharp实现印章管理(8)

上一章虽然增加了按路径绘制文本,支持按矩形、圆形、椭圆等路径,但测试时发现通过调整尺寸、偏移量等方式不是很好控制文本的位置。相对而言,使用弧线路径,通过弧线起始角度及弧线角度控制文本位置更简单。同时基于路径绘制文本时…

2024 新手指南:轻松掌握 Win10 的录屏操作

之前为了节约成本我们公司都采用录制软件操作都方式来为异地的同事进行远程操作培训的。所以我们尝试了不少的录屏工具,这里我就分享下win10怎么录屏的操作过程。 1.福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 这款录屏工具是初学者的理想之选&…

Linux入门2

文章目录 一、Linux基本命令1.1 文件的创建和查看命令1.2 文件的复制移动删除等命令1.3 查找命令1.4 文件的筛选和管道的使用1.5 echo、tail和重定向符 二、via编辑器三、权限控制3.1 root用户(超级管理员)3.2 用户和用户组3.3 权限信息3.4 chmod命令 一…

【python设计模式4】结构型模式1

目录 适配器模式 桥模式 适配器模式 将一个类的接口转换成客户希望的另外一个接口,适配器使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实现适配器的两种方式,类适配器使用多继承,对象适配器使用组合。组合就是一个类中放入另…

Django-cookie和session

文章目录 前言CookieSession 一、Django 中 Cookie二、Django 中 Session三.区别 前言 Cookie Cookie 是由服务器发送到用户浏览器的小文件,用于存储用户的相关信息。每次用户访问网站时,浏览器会将这些 cookie 发送回服务器 特点: 1. 数据存储在客户…

网络质量劣化分析:保障业务连续性与网络优化的核心步骤

目录 什么是网络质量劣化? 常见的网络质量劣化表现 网络质量劣化的常见原因 1. 网络设备性能不足或老化 2. 网络配置问题 3. 链路拥塞 4. 外部攻击或恶意流量 案例分析:一次企业内部网络劣化的解决过程 如何防止网络质量劣化? 结语…

【图像检索】基于傅里叶描述子的形状特征图像检索,matlab实现

博主简介:matlab图像代码项目合作(扣扣:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于傅里叶描述子的形状特征图像检索,用matlab实现。 一、案例背景和算法…

Python 序列( 列表 字典 元组 集合)

列表简介: 1.列表:用于存储任意数目、任意类型的数据集合。 2.列表是内置可变序列,是包含多个元素的有序连续的内存空间。列表的标准语法格式:a[10,20,30,40]其中,10,20,30,40这些称为:列表a的元素。 3.…

2024年“华为杯”研赛第二十一届中国研究生数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

尚硅谷javaweb笔记

1、基本概念 1.1、前言 web开发: web,网页的意思,www.baidu.com 静态web html,css 提供给所有人看的数据始终不会发生变化! 动态web 淘宝,几乎是所有的网站; 提供给所有人看的数据始终会发生变化&…

xxl-job demo下载部署测试

0.简要介绍 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 1.下载 官网地址 gitee 2.准备 安装mysql,并在数据库中导入xxl-job必须的表&#…

利士策分享,周末时光:一场自我充实的精致规划

利士策分享,周末时光:一场自我充实的精致规划 在这个快节奏的生活中,周末仿佛是我们心灵的避风港,是忙碌一周后的温柔慰藉。如何充分利用这宝贵的48小时,让身心得到真正的放松与成长,成为了许多人探索的课…

IBM Spectrum LSF 用户基础

获取 IBM Spectrum LSF 工作负载管理概念和操作的概述。 1、IBM Spectrum LSF 概述 LSF 如何满足您的作业需求并找到运行该作业的最佳资源。 - IBM Spectrum LSF IBM Spectrum LSF (“LSF” ,简称为负载共享设施) 软件是业界领先的企业级软件。 LSF 在现有异构 I…

Day69补 前后端分离思想

ajax前后端分离 前后端分离处理:前端------(数据)-----服务端----(数据)-----前端-----动态改变页面的内容 1.json 1、JSON:由于JSON易读以及纯文本格式的特性,可以非常容易地与其他程序进行沟通…

Xinstall全链路解决方案,让社交App推广效果倍增!

随着互联网的飞速发展,社交App如雨后春笋般涌现,然而,如何在激烈的市场竞争中脱颖而出,成为每个推广者亟待解决的问题。今天,就让我们来揭秘Xinstall如何助力社交App打破运营推广瓶颈,让你的推广之路更加顺…

MyBatis 基本操作 - XML版

目录 配置xml文件 一&#xff0c;查询 - Select 1.1 全列查询 1.2 赋值问题 二&#xff0c;新增 - insert 2.1 使用对象插入 2.2 获取主键 三&#xff0c;删除 - delete 四&#xff0c;修改 - update 配置xml文件 <?xml version"1.0" encoding"U…

井盖状态检测数据集

井盖状态检测数据集 yolo格式 五种类别&#xff1a;broke(井盖破损)&#xff0c;good(完好)&#xff0c;circle(边圈破损)&#xff0c;lose(井盖丢失)&#xff0c;uncovered(井盖位移/未覆盖全) 训练数据已划分&#xff0c;配置文件稍做路径改动即可训练。 训练集&#xff1a;1…