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

BUAT BAHASA plpython3u – PostgreSQL 9.6

Ini adalah salah satu blog tercepat yang saya publikasikan :). Saya menerbitkan dari terminal saya seperti pengujian saya untuk membuat bahasa plpython3u.

Menggunakan distribusi python yang tepercaya atau tidak tepercaya, kita dapat membuat bahasa plpython3u di PostgreSQL. Dalam pengujian saya, saya mencoba dengan distribusi SCL (saya tidak merekomendasikan, saya mencoba untuk menguji) python3.3 untuk membuat bahasa plpython3u.

Mari kita mulai membuat bahasa pada versi biner dari instalasi PostgreSQL 9.6 tanpa mengutak-atik.

-bash-4.2$ psql
psql.bin (9.6.4)
Ketik "bantuan" untuk bantuan.

postgres=# CREATE LANGUAGE plpython3u;
ERROR:tidak dapat memuat pustaka “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so”:libpython3.3m.so.1.0:tidak dapat membuka file objek bersama:Tidak ada file atau direktori

Hmmm, “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so” mencari pustaka “libpython3.3m.so.1.0”. Untuk mengonfirmasi, jalankan perintah “ldd”

-bash-4.2$ cd /opt/PostgreSQL/9.6/lib/postgresql/
-bash-4.2$ ldd plpython3.so
linux-vdso.so.1 => (0x00007fff9db12000)
libpython3.3m.so.1.0 => tidak ditemukan
libc.so.6 => /lib64/libc.so.6 (0x00007fe75e42f000)
/lib64/ld-linux-x86-64.so. 2 (0x00007fe75ea27000)

Sekarang, jelas kita membutuhkan libpython3.3m.so.1.0 untuk membuat bahasa plpython3u.

Mari kita mulai sebagai pengguna root untuk menginstal python3.3 dari repo SCL dengan mengaktifkannya.

#yum install centos-release-scl
#yum install python33

Setelah menginstal, cari perpustakaan “libpython3.3m.so.1.0” yang dibutuhkan oleh plpython3.so

[root@tools ~]# temukan / -nama libpython3.3m.so.1.0/opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0

Dingin. Untuk menggunakan sakelar bundel Python3 sebagai pengguna postgres dan menyetel variabel lingkungan PYTHONPATH, PYTHONHOME, PATH, dan LD_LIBRARY_PATH.

-bash-4.2$ ekspor PYTHONPATH=/opt/rh/python33/root/usr
-bash-4.2$ ekspor PYTHONHOME=/opt/rh/python33/root/usr
-bash-4.2$ ekspor LD_LIBRARY_PATH=/opt/rh/python33/root/usr/lib64:$LD_LIBRARY_PATH
-bash-4.2$ export PATH=$PYTHONPATH:$PATH

Coba jalankan “ldd” di “/opt/PostgreSQL/9.6/lib/postgresql/plpython3.so” lagi untuk memeriksa pustaka yang dipilih dengan benar.

-bash-4.2$ cd /opt/PostgreSQL/9.6/lib/postgresql/
-bash-4.2$ ldd plpython3.so
linux-vdso.so.1 => (0x00007ffe26ed000)
libpython3.3m.so.1.0 => /opt/rh/python33/root/usr/lib64/libpython3.3m.so.1.0 (0x00007fd31c205000)
libc.so.6 => /lib64/libc.so. 6 (0x00007fd31be2d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd31bc11000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd31ba0d000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007fd31b809000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd31b507000)
/lib64/ld -linux-x86-64.so.2 (0x00007fd31c89c000)

Bagus. Kami siap. Mari kita restart server dan buat bahasa plpython3u.

-bash-4.2$ pg_ctl restart
server mulai

-bash-4.2$ psql
psql.bin (9.6.4)
Ketik "help" untuk bantuan.

postgres=# BUAT BAHASA plpython3u;
BUAT BAHASA

Sangat bagus… Satu langkah terakhir, mari uji bahasa plpython3u dengan membuat fungsi sampel.

postgres=# CREATE OR REPLACE FUNCTION maxme (a integer, b integer) RETURNS integer AS
$$
if a > b:
return a
else
return b
$$ LANGUAGE plpython3u;
CREATE FUNCTION
postgres=# SELECT maxme(1, 2);
memax
-------
2
(1 row)

Bagus. Selamat menikmati!!

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. Kontainer Spring Docker tidak dapat mengakses kontainer Postgres Docker

  2. PostgreSQL GABUNG dengan tipe array dengan urutan elemen array, bagaimana cara mengimplementasikannya?

  3. Memanggil fungsi atau prosedur yang tersimpan tidak akan memasukkan dan mempertahankan perubahan

  4. Hubungan tidak ada

  5. Menghapus tag HTML di PostgreSQL