PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cài đặt PL / Java 1.5.2 trong PostgreSQL 11

PostgreSQL 11 bao gồm một số ngôn ngữ thủ tục với phân phối cơ sở: PL / pgSQL, PL / Tcl, PL / Perl và PL / Python . Ngoài ra, có một số ngôn ngữ thủ tục được phát triển và duy trì bên ngoài Phân phối PostgreSQL cốt lõi như PL / Java (Java), PL / Lua (Lua), PL / R (R), PL / sh (Unix Shell) và PL / v8 (JavaScript) .

Trong bài đăng này, chúng ta sẽ xem cách biên dịch / cài đặt mô-đun bổ trợ ngôn ngữ thủ tục PL / Java trong PostgreSQL 11.

PL / Java là một mô-đun bổ trợ miễn phí mang các Thủ tục, Trình kích hoạt và Chức năng được Lưu trữ Java vào phần phụ trợ PostgreSQL ™. Cách hoạt động ngày nay, khi bạn viết một hàm PL / Java, một mã Java đã biên dịch (tệp .class) được lưu trữ trong tệp lưu trữ Java (tệp .jar), sẽ được tải vào cơ sở dữ liệu. Khi hàm PL / Java thực thi, nó tạo một JVM trong quy trình máy chủ PostgreSQL và sau đó yêu cầu JVM thực thi dạng mã byte của hàm. Nó cũng có thể truy cập một phương thức của một lớp Java. Tuy nhiên, PL / Java không bao gồm trình biên dịch Java hoặc Máy ảo Java, những thành phần đó phải là một nguồn riêng biệt, nó chỉ bao gồm một tập hợp các công cụ hỗ trợ triển khai giúp dễ dàng cài đặt / quản lý các chức năng phía máy chủ được viết bằng Java. Tập lệnh này được sử dụng để tăng tốc bán thuốc Viagra generic trong các hiệu thuốc trực tuyến.

Việc kích hoạt PL / Java trong cơ sở dữ liệu PostgreSQL có những lợi ích và cảnh báo riêng - chúng ta đừng đi sâu vào những chi tiết đó ở đây, tuy nhiên bạn có thể xem qua một bài viết giải thích chi tiết về việc áp dụng PL / Java tại đây. Hãy bắt đầu các bước cài đặt.

Điều kiện tiên quyết về phần mềm

  • Cài đặt Phụ thuộc
    gcc-c ++, gcc, java 1.8.x, openssl
  • Cài đặt Apache Maven để xây dựng PL / Java
  • Cài đặt PostgreSQL 11.x (phiên bản RPM)

Cài đặt phụ thuộc

[root@rag-node1 ~]# yum install gcc* openssl* java-1.8.0-openjdk java-1.8.0-openjdk-devel

[root@rag-node1 ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

[root@rag-node1 ~]# java -version
openjdk version "1.8.0_201"
OpenJDK Runtime Environment (build 1.8.0_201-b09)


Cài đặt Apache Maven

PL / Java được xây dựng bằng Apache Maven. Nó sẽ thực thi trên gói nguồn PL / Java và tạo ra các tệp cần thiết cho PostgreSQL (Nó sẽ không cài đặt). Tải xuống Apache Maven mới nhất và làm theo các bước như hình dưới đây:

[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

Bật mvn trong 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 --version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T18:41:47Z)
Maven home: /usr/local/src/apache-maven-3.6.0
Java 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/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.10.1.el7.x86_64", arch: "amd64", family: "unix"


Cài đặt / Định cấu hình PostgreSQL 11

  1. Cài đặt PostgreSQL v11 Yum Repository từ trang PostgreSQL.org.
    yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
  2. Cài đặt PostgreSQL qua YUM
    [root@rag-node1 ~]# yum install postgresql11*
  3. Thiết lập cụm cơ sở dữ liệu và bắt đầu.
    [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. Xác minh kết nối cơ sở dữ liệu và kiểm tra danh sách các ngôn ngữ trong cơ sở dữ liệu. (mặc định:đã bật plpgsql)
    [root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres -c "\dL"
                             List of languages
      Name   |  Owner   | Trusted |      Description
    ---------+----------+---------+-----------------------------------
     plpgsql | postgres | t       | PL/pgSQL procedural language
    (1 rows)

Sau khi cài đặt tất cả các phụ thuộc, hãy đặt các biến môi trường ( gcc, java, pg_config, mvn ) để chúng ở trong PATH để biên dịch 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 ~]# which pg_config
/usr/pgsql-11/bin/pg_config

Tất cả chúng ta đều được thiết lập với các yếu tố phụ thuộc.

Cài đặt / Định cấu hình PL / Java

Tải xuống định dạng PL / Java tar.gz từ trang phát hành tại đây và giải nén .tar.gz vào thư mục.

[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

Chạy ‘ mvn clean install Lệnh ‘trong thư mục được trích xuất.

[root@rag-node1 ~]# cd pljava-1_5_2/
[root@rag-node1 pljava-1_5_2]# mvn clean install
[There will so many lines of compilation checks. Trimming off for user clarity]

[INFO] Executed tasks
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ pljava-packaging ---
[INFO] Installing /root/pljava-1_5_2/pljava-packaging/pom.xml to /root/.m2/repository/org/postgresql/pljava-packaging/1.5.2/pljava-packaging-1.5.2.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for PostgreSQL PL/Java 1.5.2:
[INFO]
[INFO] PostgreSQL PL/Java ................................. SUCCESS [  1.188 s]
[INFO] PL/Java API ........................................ SUCCESS [  2.676 s]
[INFO] PL/Java backend Java code .......................... SUCCESS [  2.790 s]
[INFO] PL/Java backend native code ........................ SUCCESS [ 21.005 s]
[INFO] PL/Java Deploy ..................................... SUCCESS [  1.672 s]
[INFO] PL/Java Ant tasks .................................. SUCCESS [  2.772 s]
[INFO] PL/Java examples ................................... SUCCESS [  1.115 s]
[INFO] PL/Java packaging .................................. SUCCESS [  1.461 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  35.751 s
[INFO] Finished at: 2019-03-30T15:01:24Z
[INFO] ------------------------------------------------------------------------
[root@rag-node1 pljava-1_5_2]#

Bạn sẽ nhận được kết quả tóm tắt ở trên từ “mvn clean install”, cho biết tất cả các phần phụ thuộc được kết nối với PL / Java. Bây giờ, hãy chạy tệp jar Pljava-pack / pg11xxx để nó sẽ giải nén / tạo ra các tệp cần thiết trong thư mục Thư viện 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 as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--unpackaged--1.5.2.sql as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--1.5.1--1.5.2.sql as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA3--1.5.2.sql as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA2--1.5.2.sql as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--1.5.1-BETA1--1.5.2.sql as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--1.5.0--1.5.2.sql as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA3--1.5.2.sql as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA2--1.5.2.sql as lines (UTF8)
/usr/pgsql-11/share/pljava/pljava--1.5.0-BETA1--1.5.2.sql as lines (UTF8)

Như bạn có thể thực hiện từ đầu ra ở trên, nó đã tạo ra một danh sách các tệp (.jar, .so, .sql) trong “/ usr / pgsql-11 / share / pljava” và “/ usr / pgsql-11 / lib ”.

Bây giờ, cho phép bật tham số PL / Java GUC trong $ PGDATA / postgresql.conf và khởi động lại máy chủ cơ sở dữ liệu để nó ảnh hưởng đến hoạt động của PL / Java. Có một tập hợp các tham số PL / Java được đề cập trong wiki ở đây, tuy nhiên, có hai tham số bắt buộc phải kích hoạt trong cụm cơ sở dữ liệu:

    • pljava.classpath - Vị trí đã tạo “pljava-1.5.2.jar” trong bước cuối cùng của chúng tôi.
    • pljava.libjvm_location - Vị trí nơi “libjvm.so” để tải Java RunTime.

Chúng tôi biết vị trí “pljava-1.5.2.jar”, ​​hãy tìm “libjvm” cho JDK 1.8.x trên máy này.

[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

Cho phép đặt cả hai tham số trong $ PGDATA / postgresql.conf và khởi động lại

[root@rag-node1 ~]# cat <<EOT >>/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

ĐƯỢC RỒI. Bây giờ, tạo ngôn ngữ PL / Java trong cơ sở dữ liệu.

[root@rag-node1 ~]# psql -p 5432 -U postgres -d postgres
psql (11.2)
Type "help" for help.

postgres=# CREATE EXTENSION pljava;
CREATE EXTENSION

Tốt đẹp!! Hãy kiểm tra nhanh bằng cách tạo hàm PL / Java và chạy.

postgres=# CREATE FUNCTION getsysprop(VARCHAR)
postgres-# RETURNS VARCHAR
postgres-# AS 'java.lang.System.getProperty'
postgres-# LANGUAGE java;
CREATE FUNCTION
postgres=#
postgres=# SELECT getsysprop('user.home');
   getsysprop
----------------
 /var/lib/pgsql
(1 row)

Ngầu!! Hy vọng nó giúp. Xin vui lòng để lại ý kiến. Cảm ơn bạn đã đọc.

- 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. Làm thế nào để sử dụng pg_stat_activity?

  2. Sử dụng nhiều mục tiêu xung đột trong mệnh đề ON CONFLICT

  3. Khóa ngoại PostgreSQL không tồn tại, vấn đề kế thừa?

  4. Làm thế nào để ép kiểu mảng json sang mảng văn bản?

  5. Cách thay đổi ngôn ngữ khi định dạng số trong PostgreSQL