PostgreSQL 11 включва няколко процедурни езика с базова дистрибуция:PL/pgSQL, PL/Tcl, PL/Perl и PL/Python . В допълнение, има редица процедурни езици, които се разработват и поддържат извън основното PostgreSQL дистрибуция като PL/Java (Java), PL/Lua (Lua), PL/R (R), PL/sh (Unix Shell) и PL/v8 (JavaScript) .
В тази публикация ще видим как да компилираме/инсталираме PL/Java модул за добавяне на процедурен език в PostgreSQL 11.
PL/Java е безплатен допълнителен модул, който носи Java Съхранени процедури, тригери и функции към бекенда на PostgreSQL™. По начина, по който работи днес, когато пишете PL/Java функция, компилиран Java код (.class файл), съхранен в Java архивен файл (.jar файл), ще бъде зареден в базата данни. Когато функцията PL/Java се изпълни, тя създава JVM в рамките на сървърния процес на PostgreSQL и след това моли JVM да изпълни формата на функцията с байт код. Може също да има достъп до метод от Java клас. Въпреки това, PL/Java не включва компилатор на Java или виртуална машина на Java, тези компоненти трябва да идват като отделни източници, просто включва набор от помощни средства за внедряване, които улесняват инсталирането/управлението на функции от страна на сървъра, написани на Java. Този скрипт се използва за ускоряване на продажбите на генерични лекарства Виагра в онлайн аптеките.
Активирането на PL/Java в базата данни на PostgreSQL има своите предимства и предупреждения – нека не навлизаме в тези подробности тук, но можете да прегледате статия, която обяснява подробно приемането на PL/Java тук. Нека започнем стъпките за инсталиране.
Софтуерни предпоставки
- Инсталиране на зависимости
gcc-c++, gcc, java 1.8.x, openssl - Инсталирайте Apache Maven за изграждане на PL/Java
- Инсталирайте PostgreSQL 11.x (RPM версия)
Инсталационни зависимости
[root@rag-node1 ~]# yum инсталирайте 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 версия "1.8.0_201"OpenJDK Runtime Environment (build 1.8.0_201-b09)
Инсталирайте Apache Maven
PL/Java е изграден с помощта на Apache Maven. Той ще се изпълнява в пакета PL/Java източник и ще произвежда файлове, необходими за PostgreSQL (няма да се инсталира). Изтеглете най-новия Apache Maven и следвайте стъпките, както е показано по-долу:
[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
Активирайте mvn в ПЪТЯ
[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 ~]# източник /etc/profile.d/maven.sh[root@rag-node1 ~]# mvn --versionApache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3:1-2; 47Z) Начало на Maven:/usr/local/src/apache-maven-3.6.0 Версия на Java:1.8.0_201, доставчик:Oracle Corporation, време на изпълнение:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201 .b09-2.el7_6.x86_64/jreDefault локал:en_US, кодиране на платформата:UTF-8OS име:"linux", версия:"3.10.0-957.10.1.el7.x86_64", arch:"amd64", семейство:"unix"
Инсталиране/конфигуриране на PostgreSQL 11
- Инсталирайте PostgreSQL v11 Yum Repository от сайта PostgreSQL.org.
yum инсталирайте https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11 -2.noarch.rpm
- Инсталирайте PostgreSQL чрез YUM
[root@rag-node1 ~]# yum инсталирайте postgresql11*
- Настройте клъстер на база данни и стартирайте.
[root@rag-node1 ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb[root@rag-node1 ~]# systemctl активиране на postgresql-11 [root@rag-node1 ~]# systemctl стартиране postgresql-11
- Проверете връзката с базата данни и проверете списъка с езици в базата данни. (по подразбиране:plpgsql е активиран)
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres -c "\dL " Списък с езици Име | Собственик | Доверен | Описание---------+----------+--------+---------- ----------------- plpgsql | postgres | t | Процедурен език PL/pgSQL (1 ред)
След като инсталирате всички зависимости, задайте променливите на средата (gcc, java, pg_config, mvn ), така че те са в PATH, за да компилират PL/Java.
[root@rag-node1 ~]# експорт PATH=/usr/pgsql-11/bin:$PATH[root@rag-node1 ~]# експорт 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 ~]# който pg_config/usr/pgsql-11/bin /pg_config
Всички сме настроени със зависимости.
Инсталиране/конфигуриране на PL/Java
Изтеглете PL/Java tar.gz формат от страницата на изданието тук и извлечете .tar.gz в директорията.
[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предварително>Изпълнете „mvn clean install команда ‘ в извлечената директория.
[root@rag-node1 ~]# cd pljava-1_5_2/[root@rag-node1 pljava-1_5_2]# mvn чиста инсталация[Ще има толкова много редове за компилационни проверки. Изрязване за яснота на потребителя][ИНФО] Изпълнени задачи[ИНФО][ИНФО] --- maven-install-plugin:2.5.2:install (инсталиране по подразбиране) @ pljava-packaging ---[ИНФО] Инсталиране /root/ pljava-1_5_2/pljava-packaging/pom.xml към /root/.m2/repository/org/postgresql/pljava-packaging/1.5.2/pljava-packaging-1.5.2.pom[ИНФО] ------ -------------------------------------------------- ----------------[ИНФО] Резюме на Reactor за PostgreSQL PL/Java 1.5.2:[ИНФОРМАЦИЯ][ИНФО] PostgreSQL PL/Java .......... ....................... УСПЕХ [ 1.188 s][ИНФО] PL/Java API ............... ......................... УСПЕХ [ 2,676 s][ИНФО] PL/Java бекенд Java код ........... ............... УСПЕХ [ 2,790 s][ИНФОРМАЦИЯ] PL/Java бекенд собствен код ..................... ... УСПЕХ [ 21.005 s][ИНФО] Разгръщане на PL/Java ................................... .. УСПЕХ [ 1,672 s][ИНФОРМАЦИЯ] PL/Java Ant задачи ................................. УСПЕХ [ 2,772 s][ИНФО] Примери за PL/Java ................................... УСПЕХ [ 1,115 s ][ИНФО] PL/Java pa пакетиране ................................. УСПЕХ [ 1,461 s][ИНФО] ------- -------------------------------------------------- ---------------[ИНФО] УСПЕХ ИЗГРАЖДАНЕ[ИНФО] --------------------------- ---------------------------------------------[ИНФО] Общо време :35,751 s [ИНФО] Завършен в:2019-03-30T15:01:24Z[ИНФО] ----------------------------- -------------------------------------------[root@rag-node1 plava -1_5_2]#Трябва да получите по-горе обобщен изход от „mvn clean install“, което показва, че всички зависимости са свързани с PL/Java. Сега стартирайте Pljava-packaging/pg11xxx jar файла, така че той да извлече/произведе необходимите файлове в директорията 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 като bytes/usr/pgsql-11/share/pljava/pljava-1.5.2.jar като bytes/usr/pgsql-11/share/pljava/pljava-api-1.5.2.jar като байтове /usr/pgsql-11/share/pljava/pljava-examples-1.5.2.jar като байтове/usr/pgsql-11/share/extension/pljava.control като редове (ASCII)/usr/pgsql-11/share/ pljava/pljava--1.5.2.sql като редове (UTF8)/usr/pgsql-11/share/pljava/pljava--unpackaged--1.5.2.sql като редове (UTF8)/usr/pgsql-11/share /pljava/pljava--1.5.1--1.5.2.sql като редове (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA3--1.5.2.sql като редове ( UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA2--1.5.2.sql като редове (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1 -BETA1--1.5.2.sql като редове (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0--1.5.2.sql като редове (UTF8)/usr/pgsql-11/ share/pljava/pljava--1.5.0-BETA3--1.5.2.sql като редове (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA2--1.5.2.sql а s редове (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA1--1.5.2.sql като редове (UTF8)Както можете да разберете от горния изход, той е създал списък с файлове (.jar, .so, .sql) в “/usr/pgsql-11/share/pljava” и “/usr/pgsql-11/lib “.
Сега нека активираме PL/Java GUC параметрите в $PGDATA/postgresql.conf и рестартираме сървъра на базата данни, така че той да повлияе на работата на PL/Java. Има набор от PL/Java параметри, споменати в wiki тук, но има два параметъра, които са задължителни за активиране в клъстера на базата данни:
- pljava.classpath – Местоположение, където „pljava-1.5.2.jar“ създаде в последната ни стъпка.
- pljava.libjvm_location – Място, където „libjvm.so“ за зареждане на Java RunTime.
Знаем местоположението „pljava-1.5.2.jar“, нека намерим „libjvm“ за JDK 1.8.x на тази машина.
[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
Нека да зададем и двата параметъра в $PGDATA/postgresql.conf и да рестартираме
[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 стоп postgresql-11[root@rag-node1 ~]# systemctl стартиране postgresql-11
ДОБРЕ. Сега създайте PL/Java език в базата данни.
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgrespsql (11.2) Въведете "help" за help.postgres=# СЪЗДАЙТЕ РАЗШИРЕНИЕ plava;СЪЗДАЙТЕ РАЗШИРЕНИЕ
Хубаво!! Нека направим бърз тест, като създадем PL/Java функция и стартираме.
postgres=# СЪЗДАВАНЕ НА ФУНКЦИЯ getsysprop(VARCHAR)postgres-# ВРЪЩА VARCHARpostgres-# КАТО 'java.lang.System.getProperty'postgres-# ЕЗИК java;CREATE FUNCTIONpostgres=#postgres=# SELECT getsysprop''user ); getsysprop---------------- /var/lib/pgsql(1 ред)
Готино!! Дано помогне. Моля, не се колебайте да оставяте коментари. Благодаря ви, че прочетохте.
—Raghav