PostgreSQL 11 inclut plusieurs langages procéduraux avec la distribution de base :PL/pgSQL, PL/Tcl, PL/Perl et PL/Python . De plus, il existe un certain nombre de langages procéduraux qui sont développés et maintenus en dehors de la distribution principale de PostgreSQL comme PL/Java (Java), PL/Lua (Lua), PL/R (R), PL/sh (Unix Shell) et PL/v8 (JavaScript) .
Dans cet article, nous allons voir comment compiler/installer le module complémentaire de langage procédural PL/Java dans PostgreSQL 11.
PL/Java est un module complémentaire gratuit qui apporte des procédures stockées, des déclencheurs et des fonctions Java au backend PostgreSQL™. De la façon dont cela fonctionne aujourd'hui, lorsque vous écrivez une fonction PL/Java, un code Java compilé (fichier .class) stocké dans un fichier d'archive Java (fichier .jar) sera chargé dans la base de données. Lorsque la fonction PL/Java s'exécute, elle crée une JVM dans le processus du serveur PostgreSQL, puis demande à la JVM d'exécuter la forme de code-octet de la fonction. Il peut également accéder à une méthode d'une classe Java. Cependant, PL/Java n'inclut pas de compilateur Java ni de machine virtuelle Java, ces composants doivent être fournis sous forme de sources distinctes, il inclut simplement un ensemble d'aides au déploiement qui facilitent l'installation/la gestion des fonctions côté serveur écrites en Java. Ce script est utilisé pour accélérer les ventes de génériques de Viagra dans les pharmacies en ligne.
L'activation de PL/Java dans la base de données PostgreSQL a ses propres avantages et mises en garde - n'entrons pas dans ces détails ici, mais vous pouvez parcourir un article qui explique en détail l'adoption de PL/Java ici. Commençons les étapes d'installation.
Prérequis logiciels
- Installer les dépendances
gcc-c++, gcc, java 1.8.x, openssl - Installer Apache Maven pour compiler PL/Java
- Installer PostgreSQL 11.x (version RPM)
Installer les dépendances
[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 version "1.8.0_201"Environnement d'exécution OpenJDK (build 1.8.0_201-b09)
Installer Apache Maven
PL/Java est construit à l'aide d'Apache Maven. Il s'exécutera sur le bundle source PL/Java et produira les fichiers requis pour PostgreSQL (il ne s'installera pas). Téléchargez la dernière version d'Apache Maven et suivez les étapes ci-dessous :
[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
Activer mvn dans le CHEMIN
[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 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3 ; 2018-10-24T18:41 :47Z)Maven home :/usr/local/src/apache-maven-3.6.0Java version :1.8.0_201, fournisseur :Oracle Corporation, runtime :/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201 .b09-2.el7_6.x86_64/jreParamètres régionaux par défaut :en_US, codage de la plate-forme :nom UTF-8OS :"linux", version :"3.10.0-957.10.1.el7.x86_64", arch :"amd64", famille :"unix"
Installer/Configurer PostgreSQL 11
- Installez PostgreSQL v11 Yum Repository depuis le site PostgreSQL.org.
yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11 -2.noarch.rpm
- Installer PostgreSQL via YUM
[root@rag-node1 ~]# yum install postgresql11*
- Configurer le cluster de base de données et démarrer.
[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
- Vérifiez la connexion à la base de données et vérifiez la liste des langues dans la base de données. (par défaut :plpgsql activé)
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres -c "\dL " Liste des langues Nom | Propriétaire | Confiance | Désignation---------+----------+---------+------------------ ----------------- plpgsql | postgres | t | Langage procédural PL/pgSQL (1 lignes)
Après avoir installé toutes les dépendances, définissez les variables d'environnement (gcc, java, pg_config, mvn ) donc ils sont dans PATH pour compiler 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 ~]# quel pg_config/usr/pgsql-11/bin /pg_config
Nous sommes tous configurés avec des dépendances.
Installer/Configurer PL/Java
Téléchargez le format PL/Java tar.gz à partir de la page de publication ici et extrayez .tar.gz dans le répertoire.
[root@rag-node1 ~]# wget https://github.com/tada/pljava/archive/V1_5_2.tar.gz[root@rag-node1 ~]# tar -xvf V1_5_2.tar.gzExécutez ‘mvn clean install ‘ commande dans le répertoire extrait.
[root@rag-node1 ~]# cd pljava-1_5_2/[root@rag-node1 pljava-1_5_2]# mvn clean install[Il y aura tellement de lignes de vérifications de compilation. Couper pour la clarté de l'utilisateur][INFO] Tâches exécutées[INFO][INFO] --- maven-install-plugin:2.5.2:install (default-install) @ pljava-packaging ---[INFO] Installation de /root/ pljava-1_5_2/pljava-packaging/pom.xml vers /root/.m2/repository/org/postgresql/pljava-packaging/1.5.2/pljava-packaging-1.5.2.pom[INFO] ------ -------------------------------------------------- ----------------[INFO] Résumé du réacteur pour PostgreSQL PL/Java 1.5.2 :[INFO][INFO] PostgreSQL PL/Java .......... ....................... SUCCÈS [ 1.188 s][INFO] API PL/Java ............... ......................... SUCCÈS [ 2.676 s][INFO] PL/Java backend Java code ........... ............... SUCCÈS [ 2.790 s][INFO] Code natif backend PL/Java ..................... ... SUCCÈS [ 21.005 s][INFO] Déploiement PL/Java ................................... .. RÉUSSITE [ 1.672 s][INFO] Tâches PL/Java Ant .................................. RÉUSSITE [ 2.772 s][INFO] Exemples PL/Java ................................... RÉUSSITE [ 1.115 s ][INFO] PL/Java pa ckaging .................................. SUCCÈS [ 1.461 s][INFO] ------- -------------------------------------------------- ---------------[INFO] CONSTRUIRE LE SUCCÈS[INFO] --------------------------- ---------------------------------------------[INFO] Temps total :35.751 s[INFO] Terminé le :2019-03-30T15:01:24Z[INFO] ------------------------ ------------------------------------------------[root@rag-node1 pljava -1_5_2]#Vous devriez obtenir la sortie récapitulative ci-dessus de "mvn clean install", qui indique que toutes les dépendances sont accrochées à PL/Java. Maintenant, exécutez le fichier jar Pljava-packaging/pg11xxx afin qu'il extraie/produise les fichiers nécessaires dans le répertoire de la bibliothèque 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 en tant que lignes (UTF8)/usr/pgsql-11/share/pljava/pljava--unpackaged--1.5.2.sql en tant que lignes (UTF8)/usr/pgsql-11/share /pljava/pljava--1.5.1--1.5.2.sql en tant que lignes (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA3--1.5.2.sql en tant que lignes ( UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA2--1.5.2.sql en tant que lignes (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1 -BETA1--1.5.2.sql en tant que lignes (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0--1.5.2.sql en tant que lignes (UTF8)/usr/pgsql-11/ partager/pljava/pljava--1.5.0-BETA3--1.5.2.sql sous forme de lignes (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA2--1.5.2.sql un s lignes (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA1--1.5.2.sql comme lignes (UTF8)Comme vous pouvez le voir à partir de la sortie ci-dessus, il a produit une liste de fichiers (.jar, .so, .sql) dans "/usr/pgsql-11/share/pljava" et "/usr/pgsql-11/lib ”.
Maintenant, activons les paramètres PL/Java GUC dans $PGDATA/postgresql.conf et redémarrons le serveur de base de données afin qu'il influence le fonctionnement PL/Java. Il existe un ensemble de paramètres PL/Java mentionnés dans le wiki ici, cependant, il y a deux paramètres qui doivent obligatoirement être activés dans le cluster de base de données :
- pljava.classpath – Emplacement où "pljava-1.5.2.jar" a été créé lors de notre dernière étape.
- pljava.libjvm_location – Emplacement où "libjvm.so" pour charger le Java RunTime.
Nous connaissons l'emplacement "pljava-1.5.2.jar", trouvons "libjvm" pour JDK 1.8.x sur cette machine.
[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
Définissons les deux paramètres dans $PGDATA/postgresql.conf et redémarrons
[root@rag-node1 ~]# cat <>/var/lib/pgsql/11/data/postgresql.conf> #Pl/Paramètres Java> 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
D'ACCORD. Maintenant, créez le langage PL/Java dans la base de données.
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgrespsql (11.2) Tapez "help" pour help.postgres=# CREATE EXTENSION pljava;CREATE EXTENSION
Joli!! Faisons un test rapide en créant une fonction PL/Java et exécutons.
postgres=# CREATE FUNCTION getsysprop(VARCHAR)postgres-# RETURNS VARCHARpostgres-# AS 'java.lang.System.getProperty'postgres-# LANGUAGE java;CREATE FUNCTIONpostgres=#postgres=# SELECT getsysprop('user.home' ); getsysprop---------------- /var/lib/pgsql(1 row)
Frais!! J'espère que cela aide. S'il vous plaît sentez vous libre de mettre un commentaire. Merci d'avoir lu.
—Raghav