PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zainstaluj PL/Java 1.5.2 w PostgreSQL 11

PostgreSQL 11 zawiera kilka języków proceduralnych z podstawową dystrybucją:PL/pgSQL, PL/Tcl, PL/Perl i PL/Python . Ponadto istnieje wiele języków proceduralnych, które są opracowywane i utrzymywane poza podstawową dystrybucją PostgreSQL, takich jak PL/Java (Java), PL/Lua (Lua), PL/R (R), PL/sh (Unix Shell) i PL/v8 (JavaScript) .

W tym poście zobaczymy, jak skompilować/zainstalować moduł dodatkowy języka proceduralnego PL/Java w PostgreSQL 11.

PL/Java to darmowy moduł dodatkowy, który wprowadza procedury składowane, wyzwalacze i funkcje Java do backendu PostgreSQL™. Tak jak to działa dzisiaj, kiedy piszesz funkcję PL/Java, skompilowany kod Java (plik .class) przechowywany w pliku archiwum Java (plik .jar) zostanie załadowany do bazy danych. Gdy funkcja PL/Java jest wykonywana, tworzy JVM w ramach procesu serwera PostgreSQL, a następnie prosi JVM o wykonanie funkcji w postaci kodu bajtowego. Może również uzyskać dostęp do metody klasy Java. Jednak PL/Java nie zawiera kompilatora Javy ani wirtualnej maszyny Javy, te komponenty powinny być dostarczane jako osobne źródła, zawiera tylko zestaw pomocy wdrożeniowych, które ułatwiają instalację/zarządzanie funkcjami po stronie serwera napisanymi w Javie. Ten skrypt służy do przyspieszenia sprzedaży leków generycznych Viagry w aptekach internetowych.

Włączenie PL/Java w bazie danych PostgreSQL ma swoje zalety i zastrzeżenia – nie wchodźmy tutaj w te szczegóły, jednak możesz zapoznać się z artykułem, który szczegółowo wyjaśnia adopcję PL/Java tutaj. Zacznijmy kroki instalacji.

Wymagania wstępne dotyczące oprogramowania

  • Zainstaluj zależności
    gcc-c++, gcc, java 1.8.x, openssl
  • Zainstaluj Apache Maven, aby zbudować PL/Java
  • Zainstaluj PostgreSQL 11.x (wersja RPM)

Zainstaluj zależności

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


Zainstaluj Apache Maven

PL/Java jest zbudowana przy użyciu Apache Maven. Uruchomi się na pakiecie źródłowym PL/Java i wygeneruje pliki wymagane dla PostgreSQL (nie zainstaluje się). Pobierz najnowszą wersję Apache Maven i postępuj zgodnie z poniższymi instrukcjami:

[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

Włącz MVN w ŚCIEŻCE

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


Zainstaluj/skonfiguruj PostgreSQL 11

  1. Zainstaluj repozytorium PostgreSQL v11 Yum ze strony PostgreSQL.org.
    yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
  2. Zainstaluj PostgreSQL przez YUM
    [root@rag-node1 ~]# yum install postgresql11*
  3. Skonfiguruj klaster bazy danych i uruchom.
    [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. Zweryfikuj połączenie z bazą danych i sprawdź listę języków w bazie danych.(domyślnie:włączony 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)

Po zainstalowaniu wszystkich zależności ustaw zmienne środowiskowe (gcc, java, pg_config, mvn ), więc są w PATH do kompilacji PL/Java.

[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

Wszyscy jesteśmy nastawieni na zależności.

Zainstaluj/skonfiguruj PL/Java

Pobierz PL/Java tar.gz ze strony wydania tutaj i rozpakuj .tar.gz do katalogu.

[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

Uruchom „czystą instalację mvn ‘ polecenie w rozpakowanym katalogu.

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

Powinieneś otrzymać powyższe podsumowanie z „mvn clean install”, które wskazuje, że wszystkie zależności są podpięte do PL/Java. Teraz uruchom plik jar Pljava-packaging/pg11xxx, aby wyodrębnić/wyprodukować potrzebne pliki w katalogu biblioteki 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)

Jak widać z powyższego wyniku, utworzył listę plików (.jar, .so, .sql) w „/usr/pgsql-11/share/pljava” i „/usr/pgsql-11/lib ”.

Teraz włączmy parametry PL/Java GUC w $PGDATA/postgresql.conf i zrestartujmy serwer bazy danych, aby wpłynęło to na działanie PL/Java. Istnieje zestaw parametrów PL/Java wspomnianych na wiki, jednak istnieją dwa parametry, które należy włączyć w klastrze bazy danych:

    • pljava.classpath – Lokalizacja, w której „pljava-1.5.2.jar” utworzono w naszym ostatnim kroku.
    • pljava.libjvm_location – Lokalizacja, w której „libjvm.so”, aby załadować Java RunTime.

Znamy lokalizację „pljava-1.5.2.jar”, ​​znajdźmy „libjvm” dla JDK 1.8.x na tym komputerze.

[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

Ustawmy oba parametry w $PGDATA/postgresql.conf i zrestartujmy

[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. Teraz utwórz język PL/Java w bazie danych.

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

postgres=# CREATE EXTENSION pljava;
CREATE EXTENSION

Ładny!! Zróbmy szybki test, tworząc funkcję PL/Java i uruchom.

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)

Fajny!! Mam nadzieję, że to pomoże. Zachęcamy do zostawiania komentarzy. Dziękuję za przeczytanie.

Raghaw


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @BatchSize inteligentne czy głupie zastosowanie?

  2. PHP nie ładuje php_pgsql.dll w systemie Windows

  3. django.db.utils.OperationalError Nie można połączyć się z serwerem

  4. Zwiększ wartość w Postgres

  5. Jak wykryć zapytanie blokujące blokadę w Postgresie?