在2011年,我在PostgreSQL PL / Java上写了一系列文章。 基本信息仍然可靠,但是现在有了一种从源代码安装PL / Java的简便方法。 这也消除了依赖第三方来创建软件包的需要。 这些注释将非常简短,因为我认为我的读者已经对git和maven熟悉了。
(注意:我已将此信息传递给PL / Java团队,因此在您阅读本文时,它可能已经被处理。)
执行基本构建
- 克隆PL / Java存储库, 网址为https://github.com/tada/pljava 。
- 运行Maven 不能使。
- …
- 利润!
当然不是那么简单。 Maven可以引入自己的依赖关系,但是除了标准的GNU工具链之外,我们仍然需要几个专门的库。 在我的Ubuntu系统上,我需要:
- PostgreSQL服务器开发9.4
- libpg开发
- libpgtypes3
- libecpg开发
(我不知道RedHat / Fedora / CentOS的相应软件包名称。)
可能需要进行一些试验,但是确定所需的所有软件包并不难。 只要记住,您通常会需要带有“ -dev”扩展名的软件包。
编译器有很多警告和错误,但大多数(如果不是全部的话)似乎与符号转换有关。 这值得进一步调查-符号转换警告表明恶意用户可能会攻击该网络-但就目前而言,只要maven成功,我们就可以了。 我们需要三个文件:
./src/sql/install.sql
./pljava/target/pljava-0.0.2-SNAPSHOT.jar
./pljava-so/target/nar/pljava-so-0.0.2-SNAPSHOT-i386-Linux-gpp-shared/lib/i386-Linux-gpp/shared/libpljava-so-0.0.2-SNAPSHOT.so
复制文件
现在,我们可以将三个文件复制到它们各自的位置。
$ sudo cp ./pljava-so/target/nar/pljava-so-0.0.2-SNAPSHOT-i386-Linux-gpp-shared/lib/i386-Linux-gpp/shared/libpljava-so-0.0.2-SNAPSHOT.so \
/usr/lib/postgresql/9.4/lib/pljava.so
$ sudo cp ./pljava/target/pljava-0.0.2-SNAPSHOT.jar /usr/share/postgresql/9.4/extension/pljava--1.4.4.jar
$ sudo cp ./src/sql/install.sql /usr/share/postgresql/9.4/extension/pljava--1.4.4.sql
我们可以使用“ pg_config”命令学习正确的目标目录。
$ pg_config
PKGLIBDIR = /usr/lib/postgresql/9.4/lib
SHAREDIR = /usr/share/postgresql/9.4
...
我将版本从0.0.2-SNAPSHOT更改为1.4.4,因为我们要捕获PL / Java版本,而不是pom.xml版本。 我希望这些很快会保持同步。
编辑pljava–1.4.4.sql
我们需要在安装sql中添加两行:
SET PLJAVA.CLASSPATH='/usr/share/postgresql/9.4/extension/pljava--1.4.4.jar';
SET PLJAVA.VMOPTIONS='-Xms64M -Xmx128M';
重要的是要记住,每个数据库连接都有一个实例化的唯一JVM。 当您同时具有20个以上的连接时,内存消耗可能成为主要问题。
创建pljava.control文件
我们必须将新扩展名告诉PostgreSQL。 这由控制文件处理。
/usr/share/postgresql/9.4/extension/pljava.control
# pljava extension
comment = 'PL/Java bundled as an extension'
default_version = '1.4.4'
relocatable = false
使libjvm.so可见
我们通常通过JAVA_HOME环境变量指定Java二进制文件和共享库的位置。 这不是数据库服务器的选项。
有两种方法取决于您是否要使Java共享库(libjvm.so)对所有应用程序或仅对数据库服务器可见。 我认为前者最简单。
我们需要创建一个文件
/etc/ld.so.conf.d/i386-linux-java.conf
/usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/server
其中大多数路径名来自JAVA_HOME。 您的系统上的位置可能不同。 该目录必须包含共享库“ libjvm.so”。
我们还必须告诉系统刷新其缓存。
$ sudo ldconfig
$ sudo ldconfig -p | grep jvm
libjvm.so (libc6) => /usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/server/libjvm.so
libjsig.so (libc6) => /usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/server/libjsig.so
加载扩展
现在,我们可以轻松地加载和卸载PL / Java。
=> CREATE EXTENSION pljava;
CREATE EXTENSION
=> DROP EXTENSION pljava;
DROP EXTENSION
万一出现薄脆...
如果系统看起来不稳定,您可以将两个“ set”命令移到postgresql.conf文件中。
/etc/postgresql/9.4/main/postgresql.conf
#------------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#------------------------------------------------------------------------------
# Add settings for extensions here
PLJAVA.CLASSPATH='/usr/share/postgresql/9.4/extension/pljava--1.4.4.jar'
PLJAVA.VMOPTIONS='-Xms64M -Xmx128M'
翻译自: https://www.javacodegeeks.com/2015/08/installing-postgresql-pljava-as-a-postgresql-extension.html