PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Instalar PL/Java 1.5.2 no PostgreSQL 11


O PostgreSQL 11 inclui várias linguagens procedurais com a distribuição base:PL/pgSQL, PL/Tcl, PL/Perl e PL/Python . Além disso, existem várias linguagens procedurais que são desenvolvidas e mantidas fora da distribuição central do PostgreSQL, como PL/Java (Java), PL/Lua (Lua), PL/R (R), PL/sh (Unix Shell) e PL/v8 (JavaScript) .

Neste post, veremos como compilar/instalar o módulo complementar da linguagem procedural PL/Java no PostgreSQL 11.

PL/Java é um módulo complementar gratuito que traz Stored Procedures, Triggers e Functions Java para o backend PostgreSQL™. Do jeito que funciona hoje, quando você escreve uma função PL/Java, um código Java compilado (arquivo .class) armazenado no arquivo Java archive (arquivo .jar), será carregado no banco de dados. Quando a função PL/Java é executada, ela cria uma JVM dentro do processo do servidor PostgreSQL e, em seguida, solicita que a JVM execute a forma de função de código de byte. Ele também pode acessar um método de uma classe Java. No entanto, PL/Java não inclui um compilador Java ou uma Java Virtual Machine, esses componentes devem vir como fontes separadas, apenas inclui um conjunto de auxiliares de implantação que facilita a instalação/gerenciamento de funções do lado do servidor escritas em Java. Este script é usado para acelerar as vendas de genéricos de Viagra em farmácias online.

Habilitar PL/Java no banco de dados PostgreSQL tem seus próprios benefícios e ressalvas – não vamos entrar nesses detalhes aqui, mas você pode ler um artigo que explica em detalhes sobre a adoção de PL/Java aqui. Vamos iniciar as etapas de instalação.

Pré-requisitos de software
  • Instalar dependências
    gcc-c++, gcc, java 1.8.x, openssl
  • Instale o Apache Maven para compilar PL/Java
  • Instale o PostgreSQL 11.x (versão RPM)

Instalar dependências
[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"OpenJDK Runtime Environment (build 1.8.0_201-b09)


Instalar o Apache Maven


PL/Java é construído usando Apache Maven. Ele será executado no pacote fonte PL/Java e produzirá os arquivos necessários para o PostgreSQL (não será instalado). Baixe o Apache Maven mais recente e siga as etapas conforme mostrado abaixo:
[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

Ativar mvn no CAMINHO
[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, fornecedor:Oracle Corporation, runtime:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201 .b09-2.el7_6.x86_64/jreDefault localidade:en_US, codificação da plataforma:UTF-8OS nome:"linux", versão:"3.10.0-957.10.1.el7.x86_64", arch:"amd64", família:"unix"


Instalar/configurar o PostgreSQL 11

  1. Instale o repositório PostgreSQL v11 Yum do site PostgreSQL.org.
    yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11 -2.noarch.rpm
  2. Instale o PostgreSQL via YUM
    [root@rag-node1 ~]# yum install postgresql11*
  3. Configure o cluster de banco de dados e inicie.
    [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. Verifique a conexão do banco de dados e verifique a lista de idiomas no banco de dados.(padrão:plpgsql ativado)
    [root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres -c "\dL " Lista de idiomas Nome | Proprietário | Confiável | Descrição ---------+----------+---------+---------------------- ----------------- plpgsql | postgres | t | Linguagem procedural PL/pgSQL (1 linhas)

Após instalar todas as dependências, defina as variáveis ​​de ambiente (gcc, java, pg_config, mvn ) então eles estão em PATH para compilar 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 ~]# que pg_config/usr/pgsql-11/bin /pg_config

Estamos todos prontos com dependências.

Instalar/Configurar PL/Java

Baixe o formato PL/Java tar.gz da página de lançamento aqui e extraia .tar.gz para o diretório.
[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 
Execute 'mvn clean install ' comando no diretório extraído.
[root@rag-node1 ~]# cd pljava-1_5_2/[root@rag-node1 pljava-1_5_2]# mvn clean install[Haverá tantas linhas de verificações de compilação. Aparar para clareza do usuário][INFO] Tarefas executadas[INFO][INFO] --- maven-install-plugin:2.5.2:install (default-install) @ pljava-packaging ---[INFO] Instalando /root/ pljava-1_5_2/pljava-packaging/pom.xml para /root/.m2/repository/org/postgresql/pljava-packaging/1.5.2/pljava-packaging-1.5.2.pom[INFO] ------ -------------------------------------------------- ----------------[INFO] Resumo do reator para PostgreSQL PL/Java 1.5.2:[INFO][INFO] PostgreSQL PL/Java .......... ......................... SUCESSO [ 1.188 s][INFO] API PL/Java ............... ......................... SUCESSO [ 2.676 s][INFO] Código Java backend PL/Java ........... ............... SUCCESS [ 2.790 s][INFO] Código nativo do backend PL/Java ..................... ... SUCESSO [ 21.005 s][INFO] PL/Java Deploy ................................... .. SUCESSO [ 1.672 s][INFO] Tarefas PL/Java Ant ..................................... SUCESSO [ 2.772 s][INFO] Exemplos de PL/Java ................................... SUCESSO [ 1.115 s ][INFO] PL/Java pa ckaging .................................. SUCESSO [ 1.461 s][INFO] ------- -------------------------------------------------- ---------------[INFO] SUCESSO DE CONSTRUÇÃO[INFO] --------------------------- ---------------------------------------------[INFO] Tempo total :35.751 s[INFO] Finalizado em:2019-03-30T15:01:24Z[INFO] ----------------------------- -------------------------------------------[root@rag-node1 pljava -1_5_2]#

Você deve obter a saída de resumo acima de “mvn clean install”, que indica que todas as dependências estão conectadas com PL/Java. Agora, execute o arquivo jar Pljava-packaging/pg11xxx para que ele extraia/produza os arquivos necessários no diretório da Biblioteca 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 como bytes/usr/pgsql-11/share/pljava/pljava-1.5.2.jar como bytes/usr/pgsql-11/share/pljava/pljava-api-1.5.2.jar como bytes /usr/pgsql-11/share/pljava/pljava-examples-1.5.2.jar as bytes/usr/pgsql-11/share/extension/pljava.control as linhas (ASCII)/usr/pgsql-11/share/ pljava/pljava--1.5.2.sql como linhas (UTF8)/usr/pgsql-11/share/pljava/pljava--unpackaged--1.5.2.sql como linhas (UTF8)/usr/pgsql-11/share /pljava/pljava--1.5.1--1.5.2.sql como linhas (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA3--1.5.2.sql como linhas ( UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA2--1.5.2.sql como linhas (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1 -BETA1--1.5.2.sql como linhas (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0--1.5.2.sql como linhas (UTF8)/usr/pgsql-11/ share/pljava/pljava--1.5.0-BETA3--1.5.2.sql como linhas (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA2--1.5.2.sql uma s linhas (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA1--1.5.2.sql como linhas (UTF8)

Como você pode ver na saída acima, ele produziu uma lista de arquivos (.jar, .so, .sql) em “/usr/pgsql-11/share/pljava” e “/usr/pgsql-11/lib ”.

Agora, vamos habilitar os parâmetros PL/Java GUC em $PGDATA/postgresql.conf e reiniciar o servidor de banco de dados para que influencie a operação PL/Java. Há um conjunto de parâmetros PL/Java mencionados no wiki aqui, no entanto, existem dois parâmetros que são obrigatórios para habilitar no cluster de banco de dados:
    • pljava.classpath – Local onde “pljava-1.5.2.jar” foi criado em nossa última etapa.
    • pljava.libjvm_location – Local onde “libjvm.so” para carregar o Java RunTime.

Conhecemos a localização “pljava-1.5.2.jar”, ​​vamos encontrar “libjvm” para JDK 1.8.x nesta máquina.
[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

Vamos definir os dois parâmetros em $PGDATA/postgresql.conf e reiniciar
[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. Agora, crie a linguagem PL/Java no banco de dados.
[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgrespsql (11.2)Digite "help" para help.postgres=# CREATE EXTENSION pljava;CREATE EXTENSION

Legal!! Vamos fazer um teste rápido criando a função PL/Java e execute.
postgres=# CRIAR FUNÇÃO 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 linha)

Frio!! Espero que ajude. Por favor, sinta-se livre para deixar comentários. Obrigado por ler.

Raghav