sql >> Database >  >> RDS >> PostgreSQL

Installeer PL/Java 1.5.2 in PostgreSQL 11

PostgreSQL 11 bevat verschillende proceduretalen met de basisdistributie:PL/pgSQL, PL/Tcl, PL/Perl en PL/Python . Daarnaast zijn er een aantal proceduretalen die worden ontwikkeld en onderhouden buiten de kern van PostgreSQL-distributie, zoals PL/Java (Java), PL/Lua (Lua), PL/R (R), PL/sh (Unix Shell), en PL/v8 (JavaScript) .

In dit bericht gaan we zien hoe de PL/Java procedurele taal-add-on-module in PostgreSQL 11 gecompileerd/geïnstalleerd kan worden.

PL/Java is een gratis add-onmodule die Java Stored Procedures, Triggers en Functions naar de PostgreSQL™-backend brengt. Zoals het tegenwoordig werkt, wordt bij het schrijven van een PL/Java-functie een gecompileerde Java-code (.class-bestand) opgeslagen in het Java-archiefbestand (.jar-bestand) in de database geladen. Wanneer de PL/Java-functie wordt uitgevoerd, wordt een JVM gemaakt binnen het PostgreSQL-serverproces en wordt de JVM vervolgens gevraagd om de bytecode-vorm van de functie uit te voeren. Het heeft ook toegang tot een methode van een Java-klasse. PL/Java bevat echter geen Java-compiler of Java Virtual Machine, die componenten zouden als aparte bronnen moeten worden geleverd, het bevat alleen een set implementatiehulpmiddelen die het eenvoudig maken om serverfuncties die in Java zijn geschreven, te installeren/beheren. Dit script wordt gebruikt om de verkoop van generieke Viagra-geneesmiddelen in online apotheken te versnellen.

Het inschakelen van PL/Java in de PostgreSQL-database heeft zijn eigen voordelen en kanttekeningen - laten we hier niet op die details ingaan, maar u kunt hier een artikel doornemen dat in detail uitlegt over PL/Java-adoptie. Laten we beginnen met de installatiestappen.

Softwarevereisten

  • Afhankelijkheden installeren
    gcc-c++, gcc, java 1.8.x, openssl
  • Installeer Apache Maven om PL/Java te bouwen
  • Installeer PostgreSQL 11.x (RPM-versie)

Afhankelijkheden installeren

[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)


Installeer Apache Maven

PL/Java is gebouwd met Apache Maven. Het wordt uitgevoerd op de PL/Java-bronbundel en produceert bestanden die nodig zijn voor PostgreSQL (het zal niet installeren). Download de nieuwste Apache Maven en volg de onderstaande stappen:

[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

Schakel mvn in in het PAD

[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 installeren/configureren

  1. Installeer PostgreSQL v11 Yum Repository van de PostgreSQL.org-site.
    yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
  2. Installeer PostgreSQL via YUM
    [root@rag-node1 ~]# yum install postgresql11*
  3. Stel databasecluster in en start.
    [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
  4. Controleer de databaseverbinding en controleer de lijst met talen in de database.(standaard:plpgsql ingeschakeld)
    [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)

Nadat u alle afhankelijkheden hebt geïnstalleerd, stelt u de omgevingsvariabelen in (gcc, java, pg_config, mvn ) dus ze zijn in PATH om PL/Java te compileren.

[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

We zijn allemaal klaar met afhankelijkheden.

PL/Java installeren/configureren

Download de PL/Java tar.gz-indeling van de releasepagina hier en pak .tar.gz uit in de map.

[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

Voer 'mvn schone installatie uit ' commando in uitgepakte map.

[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]#

Je zou bovenstaande samenvattingsoutput moeten krijgen van "mvn clean install", wat aangeeft dat alle afhankelijkheden zijn gekoppeld aan PL/Java. Voer nu het jar-bestand Pljava-packaging/pg11xxx uit zodat het de benodigde bestanden in de PostgreSQL-bibliotheekmap uitpakt/produceert.

[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)

Zoals je kunt zien aan de hand van de bovenstaande uitvoer, heeft het een lijst met bestanden (.jar, .so, .sql) geproduceerd in "/usr/pgsql-11/share/pljava" en "/usr/pgsql-11/lib ”.

Laten we nu de PL/Java GUC-parameters inschakelen in $PGDATA/postgresql.conf en de databaseserver opnieuw opstarten zodat deze de werking van PL/Java beïnvloedt. Er wordt hier een reeks PL/Java-parameters genoemd in de wiki, maar er zijn twee parameters die verplicht moeten worden ingeschakeld in het databasecluster:

    • pljava.classpath – Locatie waar "pljava-1.5.2.jar" is gemaakt in onze laatste stap.
    • pljava.libjvm_location – Locatie waar “libjvm.so” de Java RunTime laadt.

We kennen de locatie "pljava-1.5.2.jar", laten we "libjvm" voor JDK 1.8.x op deze machine vinden.

[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

Laten we beide parameters instellen in $PGDATA/postgresql.conf en opnieuw opstarten

[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É. Maak nu PL/Java-taal in de database.

[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres
psql (11.2)
Type "help" for help.

postgres=# CREATE EXTENSION pljava;
CREATE EXTENSION

Leuk!! Laten we een snelle test doen door de PL/Java-functie te maken en uit te voeren.

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)

Stoer!! Hoop dat het helpt. Laat gerust reacties achter. Bedankt voor het lezen.

Raghav


  1. SQLite GLOB

  2. Hoe geef ik met psql een lijst weer van extensies die in een database zijn geïnstalleerd?

  3. Benchmarking van beheerde PostgreSQL-cloudoplossingen:deel twee - Amazon RDS

  4. Oracle JDBC intermitterend verbindingsprobleem