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
- 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
- Instal PostgreSQL melalui YUM
[root@rag-node1 ~]# yum install postgresql11*
- 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
- 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.gzJalankan ‘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