PostgreSQL 11 obsahuje několik procedurálních jazyků se základní distribucí:PL/pgSQL, PL/Tcl, PL/Perl a PL/Python . Kromě toho existuje řada procedurálních jazyků, které jsou vyvíjeny a udržovány mimo základní distribuci PostgreSQL, jako je PL/Java (Java), PL/Lua (Lua), PL/R (R), PL/sh (Unix Shell) a PL/v8 (JavaScript) .
V tomto příspěvku se podíváme, jak zkompilovat/instalovat přídavný modul procedurálního jazyka PL/Java v PostgreSQL 11.
PL/Java je bezplatný přídavný modul, který přináší Java uložené procedury, spouštěče a funkce do backendu PostgreSQL™. Jak to dnes funguje, když napíšete funkci PL/Java, do databáze se načte zkompilovaný kód Java (soubor .class) uložený v archivním souboru Java (soubor .jar). Když se funkce PL/Java spustí, vytvoří JVM v rámci procesu serveru PostgreSQL a poté požádá JVM, aby provedl funkci ve formě bajtového kódu. Může také přistupovat k metodě třídy Java. PL/Java však nezahrnuje kompilátor Java nebo Java Virtual Machine, tyto komponenty by měly být dodávány jako samostatné zdroje, pouze obsahují sadu pomůcek pro nasazení, které usnadňují instalaci/správu funkcí na straně serveru napsaných v Javě. Tento skript se používá k urychlení prodeje generik Viagry v online lékárnách.
Povolení PL/Java v databázi PostgreSQL má své výhody a výhrady – nezabírejme se zde do těchto podrobností, můžete si však projít článek, který podrobně vysvětluje přijetí PL/Java zde. Začněme kroky instalace.
Softwarové předpoklady
- Instalovat závislosti
gcc-c++, gcc, java 1.8.x, openssl - Nainstalujte Apache Maven k sestavení PL/Java
- Nainstalujte PostgreSQL 11.x (verze RPM)
Instalovat závislosti
[root@rag-node1 ~]# yum install gcc* openssl* java-1.8.0-openjdk java-1.8.0-openjdk-devel[root@rag-node1 ~]# gcc --versiongcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)[root@rag-node1 ~]# java -versionopenjdk verze "1.8.0_201" Runtime Environment OpenJDK (sestavení 1.8.0_201-b09)
Nainstalujte Apache Maven
PL/Java je postavena pomocí Apache Maven. Spustí se na zdrojovém balíčku PL/Java a vytvoří soubory požadované pro PostgreSQL (neinstaluje se). Stáhněte si nejnovější Apache Maven a postupujte podle níže uvedených kroků:
[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
Povolit mvn v 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 --versionApache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719411-10; 28:28 47Z)Maven home:/usr/local/src/apache-maven-3.6.0Java verze:1.8.0_201, prodejce:Oracle Corporation, runtime:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201 .b09-2.el7_6.x86_64/jreDefault locale:en_US, kódování platformy:UTF-8OS název:"linux", verze:"3.10.0-957.10.1.el7.x86_64", arch:"amd64", rodina:"unix"
Instalace/konfigurace PostgreSQL 11
- Nainstalujte PostgreSQL v11 Yum Repository ze stránky PostgreSQL.org.
yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11 -2.noarch.rpm
- Nainstalujte PostgreSQL přes YUM
[root@rag-node1 ~]# yum nainstalujte postgresql11*
- Nastavte databázový cluster a spusťte jej.
[root@rag-node1 ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb[root@rag-node1 ~]# systemctl povolit postgresql-11 [root@rag-node1 ~]# systemctl start postgresql-11
- Ověřte připojení k databázi a zkontrolujte seznam jazyků v databázi. (výchozí:plpgsql povoleno)
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres -c "\dL " Seznam jazyků Název | Majitel | Důvěryhodný | Popis---------+----------+---------+------------------- ----------------- plpgsql | postgres | t | PL/pgSQL procedurální jazyk (1 řádky)
Po instalaci všech závislostí nastavte proměnné prostředí (gcc, java, pg_config, mvn ), takže jsou v PATH ke kompilaci 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
Všichni máme nastaveny závislosti.
Instalovat/konfigurovat PL/Java
Stáhněte si PL/Java formát tar.gz ze stránky vydání zde a extrahujte .tar.gz do adresáře.
[root@rag-node1 ~]# wget https://github.com/tada/pljava/archive/V1_5_2.tar.gz[root@rag-node1 ~]# tar -xvf V1_5_2.tar.gzSpusťte „čistou instalaci mvn ‘ příkaz v extrahovaném adresáři.
[root@rag-node1 ~]# cd pljava-1_5_2/[root@rag-node1 pljava-1_5_2]# čistá instalace mvn[Bude tolik řádků kontrol kompilace. Oříznutí kvůli přehlednosti pro uživatele][INFO] Provedené úlohy[INFO][INFO] --- maven-install-plugin:2.5.2:install (výchozí instalace) @ pljava-packaging ---[INFO] Instalace /root/ pljava-1_5_2/pljava-packaging/pom.xml do /root/.m2/repository/org/postgresql/pljava-packaging/1.5.2/pljava-packaging-1.5.2.pom[INFO] ------ -------------------------------------------------- ----------------[INFO] Souhrn reaktoru pro PostgreSQL PL/Java 1.5.2:[INFO][INFO] PostgreSQL PL/Java .......... ....................... ÚSPĚCH [ 1,188 s][INFO] PL/Java API ............... ...................... ÚSPĚCH [ 2,676 s][INFO] PL/Java backend Java kód ........... ............... ÚSPĚCH [ 2,790 s][INFO] PL/Java backend nativní kód ...................... ... ÚSPĚCH [ 21,005 s][INFO] PL/Java Deploy ................................... .. ÚSPĚCH [ 1,672 s][INFO] Úkoly PL/Java Ant .................................. ÚSPĚCH [ 2,772 s][INFO] PL/Java příklady ................................... ÚSPĚCH [ 1,115 s ][INFO] PL/Java pa blokování ................................... ÚSPĚCH [ 1,461 s][INFO] ------- -------------------------------------------------- ---------------[INFO] VYTVÁŘENÍ ÚSPĚCHU[INFO] --------------------------- ---------------------------------------------[INFO] Celkový čas :35,751 s[INFO] Ukončeno:2019-03-30T15:01:24Z[INFO] ------------------------------ ------------------------------------------[root@rag-node1 pljava -1_5_2]#Výše uvedený souhrnný výstup byste měli získat z „mvn clean install“, což znamená, že všechny závislosti jsou spojeny s PL/Java. Nyní spusťte soubor jar Pljava-packaging/pg11xxx, aby extrahoval/vytvářel potřebné soubory v adresáři PostgreSQL Library.
[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 jako bytes/usr/pgsql-11/share/extension/pljava.control as lines (ASCII)/usr/pgsql-11/share/ pljava/pljava--1.5.2.sql jako řádky (UTF8)/usr/pgsql-11/share/pljava/pljava--unpackaged--1.5.2.sql jako řádky (UTF8)/usr/pgsql-11/share /pljava/pljava--1.5.1--1.5.2.sql jako řádky (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA3--1.5.2.sql jako řádky ( UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA2--1.5.2.sql jako řádky (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1 -BETA1--1.5.2.sql jako řádky (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0--1.5.2.sql jako řádky (UTF8)/usr/pgsql-11/ share/pljava/pljava--1.5.0-BETA3--1.5.2.sql jako řádky (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA2--1.5.2.sql A s řádky (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA1--1.5.2.sql jako řádky (UTF8)Jak můžete zjistit z výše uvedeného výstupu, vytvořil seznam souborů (.jar, .so, .sql) v „/usr/pgsql-11/share/pljava“ a „/usr/pgsql-11/lib “.
Nyní povolme parametry PL/Java GUC v $PGDATA/postgresql.conf a restartujeme databázový server, aby to ovlivnilo provoz PL/Java. Na wiki je zde uvedena sada parametrů PL/Java, nicméně jsou zde dva parametry, které je nutné povolit v databázovém clusteru:
- pljava.classpath – Místo, kde byl v našem posledním kroku vytvořen „pljava-1.5.2.jar“.
- umístění pljava.libjvm – Umístění, kde se má „libjvm.so“ načíst Java RunTime.
Známe umístění „pljava-1.5.2.jar“, pojďme najít „libjvm“ pro JDK 1.8.x na tomto počítači.
[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
Nastavíme oba parametry v $PGDATA/postgresql.conf a restartujeme
[root@rag-node1 ~]# cat <>/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. Nyní vytvořte jazyk PL/Java v databázi.
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgrespsql (11.2) Zadejte "help" pro help.postgres=# CREATE EXTENSION pljava;CREATE EXTENSION
Pěkný!! Proveďte rychlý test vytvořením funkce PL/Java a spusťte.
postgres=# VYTVOŘIT FUNKCI getsysprop(VARCHAR)postgres-# VRACÍ VARCHARpostgres-# JAKO 'java.lang.System.getProperty'postgres-# JAZYK java;CREATE FUNCTIONpostgres=#postgres=# VYBERTE getsysprop('user.home' ); getsysprop---------------- /var/lib/pgsql(1 řádek)
Chladný!! Doufám, že to pomůže. Neváhejte a zanechte komentáře. Děkuji za přečtení.
—Raghav