PostgreSQL 11には、基本ディストリビューションを持ついくつかの手続き型言語が含まれています: PL / pgSQL、PL / Tcl、PL / Perl、およびPL / Python 。さらに、PL / Java(Java)、PL / Lua(Lua)、PL / R(R)、PL / sh(Unix)など、コアPostgreSQLディストリビューションの外部で開発および保守されている手続き型言語が多数あります。シェル)、およびPL / v8(JavaScript) 。
この投稿では、PostgreSQL11でPL/Java手続き型言語アドオンモジュールをコンパイル/インストールする方法を説明します。
PL / Javaは、Javaストアドプロシージャ、トリガー、および関数をPostgreSQL™バックエンドに提供する無料のアドオンモジュールです。現在の動作方法では、PL / Java関数を作成すると、Javaアーカイブファイル(.jarファイル)に格納されているコンパイル済みのJavaコード(.classファイル)がデータベースにロードされます。 PL / Java関数を実行すると、PostgreSQLサーバープロセス内にJVMが作成され、JVMにバイトコード形式の関数を実行するように要求されます。また、Javaクラスのメソッドにアクセスすることもできます。ただし、PL / JavaにはJavaコンパイラまたはJava仮想マシンは含まれていません。これらのコンポーネントは個別のソースとして提供される必要があり、Javaで記述されたサーバー側関数のインストール/管理を容易にする一連のデプロイメントエイドが含まれているだけです。このスクリプトは、オンライン薬局でのViagraジェネリックの販売を加速するために使用されます。
PostgreSQLデータベースでPL/Javaを有効にすると、独自の利点と警告があります。ここではそれらの詳細については説明しませんが、PL/Javaの採用について詳しく説明している記事をここで確認できます。インストール手順を始めましょう。
ソフトウェアの前提条件
- 依存関係のインストール
gcc-c++、gcc、java 1.8.x、openssl - ApacheMavenをインストールしてPL/Javaをビルドします
- PostgreSQL 11.x(RPMバージョン)をインストールします
依存関係のインストール
[root@rag-node1 ~]# yum install gcc* openssl* java-1.8.0-openjdk java-1.8.0-openjdk-devel [root@rag-node1 ~]# gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36) [root@rag-node1 ~]# java -version openjdk version "1.8.0_201" OpenJDK Runtime Environment (build 1.8.0_201-b09)
ApacheMavenをインストールします
PL/JavaはApacheMavenを使用して構築されています。 PL / Javaソースバンドルで実行され、PostgreSQLに必要なファイルを生成します(インストールされません)。最新のApacheMavenをダウンロードし、以下に示す手順に従います。
[root@rag-node1 ~]# cd /usr/local/src/ [root@rag-node1 src]# wget https://www-us.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz [root@rag-node1 src]# tar -xvf apache-maven-3.6.0-bin.tar.gz [root@rag-node1 src]# cd apache-maven-3.6.0
mvnを有効にする パス内
[root@rag-node1 ~]# cd /etc/profile.d/ [root@rag-node1 profile.d]# vi maven.sh [root@rag-node1 profile.d]# chmod +x maven.sh [root@rag-node1 ~]# source /etc/profile.d/maven.sh [root@rag-node1 ~]# mvn --version Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T18:41:47Z) Maven home: /usr/local/src/apache-maven-3.6.0 Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.10.1.el7.x86_64", arch: "amd64", family: "unix"
PostgreSQL11のインストール/構成
- PostgreSQL.orgサイトからPostgreSQLv11Yumリポジトリをインストールします。
yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
- YUMを介してPostgreSQLをインストールします
[root@rag-node1 ~]# yum install postgresql11*
- データベースクラスターをセットアップして開始します。
[root@rag-node1 ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb [root@rag-node1 ~]# systemctl enable postgresql-11 [root@rag-node1 ~]# systemctl start postgresql-11
- データベース接続を確認し、データベース内の言語のリストを確認します。(デフォルト:plpgsqlが有効)
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres -c "\dL" List of languages Name | Owner | Trusted | Description ---------+----------+---------+----------------------------------- plpgsql | postgres | t | PL/pgSQL procedural language (1 rows)
すべての依存関係をインストールした後、環境変数( gcc、java、pg_config、mvn )を設定します )したがって、PL/JavaをコンパイルするためのPATHにあります。
[root@rag-node1 ~]# export PATH=/usr/pgsql-11/bin:$PATH [root@rag-node1 ~]# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64 [root@rag-node1 ~]# export PATH=$JAVA_HOME:$PATH [root@rag-node1 ~]# which pg_config /usr/pgsql-11/bin/pg_config
私たちは皆、依存関係を持っています。
PL/Javaのインストール/構成
こちらのリリースページからPL/Java tar.gz形式をダウンロードし、.tar.gzをディレクトリに抽出します。
[root@rag-node1 ~]# wget https://github.com/tada/pljava/archive/V1_5_2.tar.gz [root@rag-node1 ~]# tar -xvf V1_5_2.tar.gz
「mvncleaninstall」を実行します 抽出されたディレクトリの‘コマンド。
[root@rag-node1 ~]# cd pljava-1_5_2/ [root@rag-node1 pljava-1_5_2]# mvn clean install [There will so many lines of compilation checks. Trimming off for user clarity] [INFO] Executed tasks [INFO] [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ pljava-packaging --- [INFO] Installing /root/pljava-1_5_2/pljava-packaging/pom.xml to /root/.m2/repository/org/postgresql/pljava-packaging/1.5.2/pljava-packaging-1.5.2.pom [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for PostgreSQL PL/Java 1.5.2: [INFO] [INFO] PostgreSQL PL/Java ................................. SUCCESS [ 1.188 s] [INFO] PL/Java API ........................................ SUCCESS [ 2.676 s] [INFO] PL/Java backend Java code .......................... SUCCESS [ 2.790 s] [INFO] PL/Java backend native code ........................ SUCCESS [ 21.005 s] [INFO] PL/Java Deploy ..................................... SUCCESS [ 1.672 s] [INFO] PL/Java Ant tasks .................................. SUCCESS [ 2.772 s] [INFO] PL/Java examples ................................... SUCCESS [ 1.115 s] [INFO] PL/Java packaging .................................. SUCCESS [ 1.461 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 35.751 s [INFO] Finished at: 2019-03-30T15:01:24Z [INFO] ------------------------------------------------------------------------ [root@rag-node1 pljava-1_5_2]#
「mvncleaninstall」から上記の要約出力を取得する必要があります。これは、すべての依存関係がPL/Javaにフックされていることを示しています。次に、Pljava-packaging / pg11xxx jarファイルを実行して、PostgreSQLライブラリディレクトリに必要なファイルを抽出/生成します。
[root@rag-node1 ~]# java -jar pljava-1_5_2/pljava-packaging/target/pljava-pg11.2-amd64-Linux-gpp.jar /usr/pgsql-11/lib/libpljava-so-1.5.2.so as bytes /usr/pgsql-11/share/pljava/pljava-1.5.2.jar as bytes /usr/pgsql-11/share/pljava/pljava-api-1.5.2.jar as bytes /usr/pgsql-11/share/pljava/pljava-examples-1.5.2.jar as bytes /usr/pgsql-11/share/extension/pljava.control as lines (ASCII) /usr/pgsql-11/share/pljava/pljava--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--unpackaged--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--1.5.1--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--1.5.1-BETA3--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--1.5.1-BETA2--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--1.5.1-BETA1--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--1.5.0--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--1.5.0-BETA3--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--1.5.0-BETA2--1.5.2.sql as lines (UTF8) /usr/pgsql-11/share/pljava/pljava--1.5.0-BETA1--1.5.2.sql as lines (UTF8)
上記の出力からわかるように、「/ usr / pgsql-11 / share/pljava」と「/usr/ pgsql-11 / lib」にファイル(.jar、.so、.sql)のリストが生成されています。 」。
次に、$ PGDATA/postgresql.confでPL/Java GUCパラメータを有効にして、データベースサーバーを再起動し、PL/Javaの動作に影響を与えます。ここにwikiで言及されているPL/Javaパラメータのセットがありますが、データベースクラスタで有効にするために必須の2つのパラメータがあります:
-
- pljava.classpath –最後のステップで「pljava-1.5.2.jar」が作成された場所。
- pljava.libjvm_location –「libjvm.so」がJavaランタイムをロードする場所。
「pljava-1.5.2.jar」の場所がわかっているので、このマシンでJDK1.8.xの「libjvm」を見つけましょう。
[root@rag-node1 ~]# find / -name "*libjvm.so*" /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/jre/lib/amd64/server/libjvm.so
$ PGDATA/postgresql.confに両方のパラメータを設定して再起動しましょう
[root@rag-node1 ~]# cat <<EOT >>/var/lib/pgsql/11/data/postgresql.conf > #Pl/Java Parameters > pljava.classpath = '/usr/pgsql-11/share/pljava/pljava-1.5.2.jar' > pljava.libjvm_location = '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/jre/lib/amd64/server/libjvm.so' > EOT [root@rag-node1 ~]# systemctl stop postgresql-11 [root@rag-node1 ~]# systemctl start postgresql-11
わかった。次に、データベースにPL/Java言語を作成します。
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres psql (11.2) Type "help" for help. postgres=# CREATE EXTENSION pljava; CREATE EXTENSIONの場合は「help」と入力します。
良い!! PL / Java関数を作成して実行し、簡単にテストしてみましょう。
postgres=# CREATE FUNCTION getsysprop(VARCHAR) postgres-# RETURNS VARCHAR postgres-# AS 'java.lang.System.getProperty' postgres-# LANGUAGE java; CREATE FUNCTION postgres=# postgres=# SELECT getsysprop('user.home'); getsysprop ---------------- /var/lib/pgsql (1 row)
涼しい!!それが役に立てば幸い。コメントを残してください。読んでいただきありがとうございます。
— Raghav