PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Instal PL/Java 1.5.2 di PostgreSQL 11

PostgreSQL 11 menyertakan beberapa bahasa prosedural dengan distribusi dasar:PL/pgSQL, PL/Tcl, PL/Perl, dan PL/Python . Selain itu, ada sejumlah bahasa prosedural yang dikembangkan dan dipelihara di luar Distribusi PostgreSQL inti seperti PL/Java (Java), PL/Lua (Lua), PL/R (R), PL/sh (Unix Shell), dan PL/v8 (JavaScript) .

Dalam posting ini, kita akan melihat cara mengkompilasi/menginstal modul add-on bahasa prosedural PL/Java di PostgreSQL 11.

PL/Java adalah modul tambahan gratis yang membawa Java Stored Procedures, Triggers, dan Functions ke backend PostgreSQL™. Cara kerjanya hari ini, ketika Anda menulis fungsi PL/Java, kode Java yang dikompilasi (file .class) yang disimpan dalam file arsip Java (file .jar), akan dimuat ke dalam database. Ketika fungsi PL/Java dijalankan, itu membuat JVM dalam proses server PostgreSQL dan kemudian meminta JVM untuk mengeksekusi bentuk byte-code dari fungsi. Itu juga dapat mengakses metode kelas Java. Namun, PL/Java tidak menyertakan kompiler Java atau Mesin Virtual Java, komponen tersebut harus datang sebagai sumber terpisah, itu hanya mencakup satu set alat bantu penyebaran yang memudahkan untuk menginstal/mengelola fungsi sisi server yang ditulis dalam Java. Script ini digunakan untuk mempercepat penjualan Viagra generik di apotek online.

Mengaktifkan PL/Java di database PostgreSQL memiliki manfaat dan peringatannya sendiri – jangan membahas detailnya di sini, namun Anda dapat membaca artikel yang menjelaskan secara rinci tentang adopsi PL/Java di sini. Mari kita mulai langkah penginstalannya.

Prasyarat Perangkat Lunak

  • Instal Dependensi
    gcc-c++, gcc, java 1.8.x, openssl
  • Instal Apache Maven untuk membangun PL/Java
  • Instal PostgreSQL 11.x (versi RPM)

Instal Dependensi

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


Instal Apache Maven

PL/Java dibangun menggunakan Apache Maven. Ini akan dieksekusi pada bundel sumber PL/Java dan menghasilkan file yang diperlukan untuk PostgreSQL (Itu tidak akan diinstal). Download Apache Maven terbaru dan ikuti langkah-langkah seperti di bawah ini:

[root@rag-node1 ~]# cd /usr/local/src/[root@rag-node1 src]# wget https://www-us.Apache.org/dist/maven/maven-3/ 3.6.0/binary/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

Aktifkan mvn di 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 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T18:41:47Z)Maven home:/usr/local/src/Apache-maven-3.6.0Java 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/jreLokal default:en_US, penyandian platform:UTF-8OS nama:"linux", versi:"3.10.0-957.10.1.el7.x86_64", lengkungan:"amd64", keluarga:"unix"


Instal/Konfigurasikan PostgreSQL 11

  1. Instal PostgreSQL v11 Yum Repository dari situs PostgreSQL.org.
    yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11 -2.noarch.rpm
  2. Instal PostgreSQL melalui YUM
    [root@rag-node1 ~]# yum install postgresql11*
  3. Siapkan cluster database dan mulai.
    [root@rag-node1 ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb[root@rag-node1 ~]# systemctl aktifkan postgresql-11 [root@rag-node1 ~]# systemctl start postgresql-11
  4. Verifikasi koneksi database dan periksa daftar bahasa dalam database. (default:plpgsql diaktifkan)
    [root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres -c "\dL " Daftar bahasa Nama | Pemilik | Tepercaya | Deskripsi---------+----------+---------+------------------ ----------------- plpgsql | postgres | t | Bahasa prosedural PL/pgSQL (1 baris)

Setelah menginstal semua dependensi, atur variabel lingkungan (gcc, java, pg_config, mvn ) sehingga mereka berada di PATH untuk mengkompilasi PL/Java.

[root@rag-node1 ~]# ekspor PATH=/usr/pgsql-11/bin:$PATH[root@rag-node1 ~]# ekspor 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

Kita sudah siap dengan dependensi.

Instal/Konfigurasikan PL/Java

Unduh format PL/Java tar.gz dari halaman rilis di sini, dan ekstrak .tar.gz ke direktori.

[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 

Jalankan ‘mvn clean install ' perintah di direktori yang diekstrak.

[root@rag-node1 ~]# cd pljava-1_5_2/[root@rag-node1 pljava-1_5_2]# mvn clean install[Ada begitu banyak baris pemeriksaan kompilasi. Pemangkasan untuk kejelasan pengguna][INFO] Tugas yang dijalankan[INFO][INFO] --- maven-install-plugin:2.5.2:install (default-install) @ pljava-packaging ---[INFO] Menginstal /root/ pljava-1_5_2/pljava-packaging/pom.xml ke /root/.m2/repository/org/postgresql/pljava-packaging/1.5.2/pljava-packaging-1.5.2.pom[INFO] ------ -------------------------------------------------- ----------------[INFO] Ringkasan Reaktor untuk PostgreSQL PL/Java 1.5.2:[INFO][INFO] PostgreSQL PL/Java .......... ....................... SUKSES [ 1.188 s][INFO] PL/Java API ............... ......................... SUKSES [ 2.676 s][INFO] PL/Java backend kode Java ........... ............... SUKSES [ 2,790 s][INFO] PL/Java backend kode asli ............................ ... SUKSES [ 21.005 s][INFO] PL/Java Deploy ................................... .. SUKSES [ 1.672 s][INFO] tugas PL/Java Ant ................................. SUKSES [ 2,772 s][INFO] Contoh PL/Java ................................... SUKSES [ 1.115 s ][INFO] PL/Java pa ckaging .................................. SUKSES [ 1.461 s][INFO] ------- -------------------------------------------------- ---------------[INFO] MEMBANGUN SUKSES[INFO] --------------------------- --------------------------------------------- [INFO] Total waktu :35,751 dt[INFO] Selesai pada:30-03-2019T15:01:24Z[INFO] ----------------------------- -------------------------------------------[root@rag-node1 pljava -1_5_2]#

Anda harus mendapatkan output ringkasan di atas dari "mvn clean install", yang menunjukkan semua dependensi terhubung dengan PL/Java. Sekarang, jalankan file jar Pljava-packaging/pg11xxx sehingga akan mengekstrak/menghasilkan file yang dibutuhkan di direktori Perpustakaan 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.jadi sebagai byte/usr/pgsql-11/share/pljava/pljava-1.5.2.jar sebagai byte/usr/pgsql-11/share/pljava/pljava-api-1.5.2.jar sebagai byte /usr/pgsql-11/share/pljava/pljava-examples-1.5.2.jar sebagai byte/usr/pgsql-11/share/extension/pljava.control sebagai baris (ASCII)/usr/pgsql-11/share/ pljava/pljava--1.5.2.sql sebagai baris (UTF8)/usr/pgsql-11/share/pljava/pljava--unpackaged--1.5.2.sql sebagai baris (UTF8)/usr/pgsql-11/share /pljava/pljava--1.5.1--1.5.2.sql sebagai baris (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA3--1.5.2.sql sebagai baris ( UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA2--1.5.2.sql sebagai baris (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.1 -BETA1--1.5.2.sql sebagai baris (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0--1.5.2.sql sebagai baris (UTF8)/usr/pgsql-11/ share/pljava/pljava--1.5.0-BETA3--1.5.2.sql sebagai baris (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA2--1.5.2.sql sebuah s lines (UTF8)/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA1--1.5.2.sql sebagai baris (UTF8)

Seperti yang dapat Anda lihat dari output di atas, ia telah menghasilkan daftar file (.jar, .so, .sql) di “/usr/pgsql-11/share/pljava” dan “/usr/pgsql-11/lib ”.

Sekarang, mari aktifkan parameter PL/Java GUC di $PGDATA/postgresql.conf dan restart server database sehingga akan mempengaruhi operasi PL/Java. Ada set parameter PL/Java yang disebutkan di wiki di sini, namun, ada dua parameter yang wajib diaktifkan di cluster database:

    • pljava.classpath – Lokasi tempat “pljava-1.5.2.jar” dibuat di langkah terakhir kami.
    • pljava.libjvm_location – Lokasi tempat “libjvm.so” memuat Java RunTime.

Kami tahu lokasi "pljava-1.5.2.jar", mari temukan "libjvm" untuk JDK 1.8.x di mesin ini.

[root@rag-node1 ~]# temukan / -nama "*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

Mari kita atur kedua parameter di $PGDATA/postgresql.conf dan mulai ulang

[root@rag-node1 ~]# cat <>/var/lib/pgsql/11/data/postgresql.conf> #Pl/Parameter 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

OKE. Sekarang, buat bahasa PL/Java di database.

[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgrespsql (11.2)Ketik "help" untuk bantuan.postgres=# CREATE EXTENSION pljava;CREATE EXTENSION

Bagus!! Mari lakukan uji cepat dengan membuat fungsi PL/Java dan menjalankannya.

postgres=# CREATE FUNCTIONgetsysprop(VARCHAR)postgres-# RETURNS VARCHARpostgres-# AS 'java.lang.System.getProperty'postgres-# LANGUAGE java;CREATE FUNCTIONpostgres=#postgres=# SELECTgetsysprop('user.home' ); getsysprop---------------- /var/lib/pgsql(1 baris)

Dingin!! Semoga membantu. Silakan tinggalkan komentar. Terima kasih telah membaca.

Raghav


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Extract() Bekerja di PostgreSQL

  2. Apache Spark:Koneksi JDBC tidak berfungsi

  3. Menulis kueri untuk beberapa tabel di php

  4. Jalankan file batch dengan perintah psql tanpa kata sandi

  5. Apa format untuk string / URL koneksi PostgreSQL?