PostgreSQL 11 enthält mehrere prozedurale Sprachen in der Basisdistribution:PL/pgSQL, PL/Tcl, PL/Perl und PL/Python . Darüber hinaus gibt es eine Reihe von prozeduralen Sprachen, die außerhalb der zentralen PostgreSQL-Distribution entwickelt und gepflegt werden, wie PL/Java (Java), PL/Lua (Lua), PL/R (R), PL/sh (Unix Shell) und PL/v8 (JavaScript) .
In diesem Beitrag werden wir sehen, wie man das PL/Java-Zusatzmodul für die prozedurale Sprache in PostgreSQL 11 kompiliert/installiert.
PL/Java ist ein kostenloses Zusatzmodul, das gespeicherte Java-Prozeduren, Trigger und Funktionen in das PostgreSQL™-Backend bringt. So wie es heute funktioniert, wird beim Schreiben einer PL/Java-Funktion ein kompilierter Java-Code (.class-Datei), der in einer Java-Archivdatei (.jar-Datei) gespeichert ist, in die Datenbank geladen. Wenn die PL/Java-Funktion ausgeführt wird, erstellt sie eine JVM innerhalb des PostgreSQL-Serverprozesses und fordert dann die JVM auf, die Bytecode-Form der Funktion auszuführen. Es kann auch auf eine Methode einer Java-Klasse zugreifen. PL/Java enthält jedoch keinen Java-Compiler oder eine Java Virtual Machine, diese Komponenten sollten als separate Quellen bereitgestellt werden, es enthält nur eine Reihe von Bereitstellungshilfen, die es einfach machen, in Java geschriebene serverseitige Funktionen zu installieren/verwalten. Dieses Skript wird verwendet, um den Verkauf von Viagra-Generika in Online-Apotheken zu beschleunigen.
Das Aktivieren von PL/Java in der PostgreSQL-Datenbank hat seine eigenen Vorteile und Vorbehalte – lassen Sie uns hier nicht auf diese Details eingehen, aber Sie können hier einen Artikel lesen, der die Einführung von PL/Java ausführlich erklärt. Beginnen wir mit den Installationsschritten.
Softwarevoraussetzungen
- Installieren Sie Abhängigkeiten
gcc-c++, gcc, java 1.8.x, openssl - Installieren Sie Apache Maven, um PL/Java zu erstellen
- Installieren Sie PostgreSQL 11.x (RPM-Version)
Abhängigkeiten installieren
[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)
Installieren Sie Apache Maven
PL/Java wird mit Apache Maven erstellt. Es wird auf dem PL/Java-Quellpaket ausgeführt und erzeugt Dateien, die für PostgreSQL erforderlich sind (es wird nicht installiert). Laden Sie die neueste Version von Apache Maven herunter und führen Sie die folgenden Schritte aus:
[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
Aktivieren Sie mvn im PATH
[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"
PostgreSQL 11 installieren/konfigurieren
- Installieren Sie das PostgreSQL v11 Yum-Repository von der Website PostgreSQL.org.
yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
- Installieren Sie PostgreSQL über YUM
[root@rag-node1 ~]# yum install postgresql11*
- Datenbankcluster einrichten und starten.
[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
- Überprüfen Sie die Datenbankverbindung und überprüfen Sie die Liste der Sprachen in der Datenbank. (Standard:plpgsql aktiviert)
[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)
Nachdem Sie alle Abhängigkeiten installiert haben, setzen Sie die Umgebungsvariablen (gcc, java, pg_config, mvn ), also sind sie in PATH, um PL/Java zu kompilieren.
[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
Wir sind alle auf Abhängigkeiten eingestellt.
PL/Java installieren/konfigurieren
Laden Sie das PL/Java tar.gz-Format von der Release-Seite hier herunter und extrahieren Sie .tar.gz in das Verzeichnis.
[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
Führen Sie 'mvn clean install aus ‘ Befehl im extrahierten Verzeichnis.
[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]#
Sie sollten die obige zusammenfassende Ausgabe von „mvn clean install“ erhalten, die anzeigt, dass alle Abhängigkeiten mit PL/Java verbunden sind. Führen Sie nun die JAR-Datei Pljava-packaging/pg11xxx aus, damit benötigte Dateien im PostgreSQL-Bibliotheksverzeichnis extrahiert/produziert werden.
[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)
Wie Sie der obigen Ausgabe entnehmen können, hat es eine Liste von Dateien (.jar, .so, .sql) in „/usr/pgsql-11/share/pljava“ und „/usr/pgsql-11/lib“ erstellt “.
Lassen Sie uns nun PL/Java GUC-Parameter in $PGDATA/postgresql.conf aktivieren und den Datenbankserver neu starten, damit er den PL/Java-Betrieb beeinflusst. Es gibt eine Reihe von PL/Java-Parametern, die hier im Wiki erwähnt werden, jedoch gibt es zwei Parameter, die im Datenbank-Cluster zwingend aktiviert werden müssen:
- pljava.classpath – Speicherort, an dem „pljava-1.5.2.jar“ in unserem letzten Schritt erstellt wurde.
- pljava.libjvm_location – Speicherort, an dem „libjvm.so“ die Java RunTime lädt.
Wir kennen den Speicherort „pljava-1.5.2.jar“, suchen wir „libjvm“ für JDK 1.8.x auf diesem Rechner.
[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
Lassen Sie uns beide Parameter in $PGDATA/postgresql.conf setzen und neu starten
[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
OK. Erstellen Sie nun die PL/Java-Sprache in der Datenbank.
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres psql (11.2) Type "help" for help. postgres=# CREATE EXTENSION pljava; CREATE EXTENSIONein
Hübsch!! Machen wir einen Schnelltest, indem wir eine PL/Java-Funktion erstellen und ausführen.
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)
Cool!! Ich hoffe es hilft. Bitte zögern Sie nicht, Kommentare zu hinterlassen. Danke fürs Lesen.
– Raghav