将PostgreSQL PL / Java安装为PostgreSQL扩展

在2011年,我在PostgreSQL PL / Java上写了一系列文章。 基本信息仍然可靠,但是现在有了一种从源代码安装PL / Java的简便方法。 这也消除了依赖第三方来创建软件包的需要。 这些注释将非常简短,因为我认为我的读者已经对git和maven熟悉了。

(注意:我已将此信息传递给PL / Java团队,因此在您阅读本文时,它可能已经被处理。)

执行基本构建

  1. 克隆PL / Java存储库, 网址为https://github.com/tada/pljava 。
  2. 运行Maven 不能使。
  3. 利润!

当然不是那么简单。 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

你可能感兴趣的:(将PostgreSQL PL / Java安装为PostgreSQL扩展)