Pendahuluan
Seperti yang Anda ketahui, PostgreSQL dirancang untuk ekstensibilitas dan kustomisasi, ini berarti bahwa kami dapat memperluas fungsionalitas database Anda menggunakan ekstensi. Fungsionalitas ekstensi PostgreSQL memungkinkan untuk menggabungkan beberapa objek SQL bersama-sama dalam satu paket yang dapat dimuat atau dihapus dari database Anda. Setelah Anda memuatnya ke dalam database, ekstensi dapat berfungsi sebagai fitur bawaan.
Basis data PostgreSQL memiliki banyak fitur dan menawarkan berbagai jenis data, fungsi, operator, dll. Namun terkadang hal itu tidak cukup untuk beberapa kasus penggunaan. Kita dapat dengan mudah memperluas fungsionalitas PostgreSQL melalui ekstensi. Ini adalah fitur yang sangat berguna untuk pengembang dan administrator basis data.
Di blog ini kita bisa membahas dua hal di bawah ini.
- Cara menggunakan ekstensi yang didukung komunitas PostgreSQL
- Cara membuat dan menggunakan ekstensi di PostgreSQL
Cara Menggunakan Ekstensi yang Didukung Komunitas PostgreSQL
Ada sejumlah modul/ekstensi contrib di PostgreSQL. Modul-modul ini dikelola oleh komunitas PostgreSQL. Kita dapat menggunakan modul ini dan fungsinya di PostgreSQL dengan membuat ekstensi.
Mari kita lihat cara menggunakan fungsionalitas ekstensi hstore di PostgreSQL.
Ekstensi Hstore
Modul hstore mengimplementasikan tipe data hstore yang menyimpan pasangan nilai kunci dalam satu nilai. Kita dapat menggunakan tipe data hstore dalam banyak kasus, seperti data semi terstruktur atau baris dengan banyak atribut yang jarang ditanyakan. Perhatikan bahwa kunci dan nilai hanyalah string teks saja. Untuk menggunakan fungsi ini, kita perlu membuat ekstensi untuknya di PostgreSQL.
Mari kita lihat cara menggunakan tipe data hstore.
CREATE TABLE books (
book_code serial primary key,
book_title VARCHAR (20),
attr hstore
);
Sebelum membuat tipe data hstore, Anda harus mengaktifkan ekstensi hstore yang memuat modul contrib ke PostgreSQL Anda.
CREATE EXTENSION hstore;
Ada berbagai fungsi hstore untuk mengambil data dari database. Anda dapat memeriksa fungsi dan contohnya di sini.
Silakan periksa modul tambahan yang disediakan di PostgreSQL.
Cara Membuat Ekstensi
Ekstensibilitas adalah salah satu fitur paling kuat di PostgreSQL. Anda dapat menambahkan fungsionalitas baru untuk kasus penggunaan tertentu dengan menggunakan modul contrib dan menginstalnya menggunakan CREATE EXTENSION.
Di bagian ini, kita akan mempelajari cara membuat modul contrib sederhana dan cara menggunakan fungsionalitasnya di PostgreSQL.
File Ekstensi
Untuk dapat menjalankan perintah CREATE EXTENSION di database Anda, ekstensi Anda harus membutuhkan setidaknya dua file:
- File kontrol
Format file harus extension_name.control, yang memberi tahu dasar-dasar tentang ekstensi ke PostgreSQL, dan harus ditempatkan di direktori SHAREDIR/extension penginstalan. - File skrip SQL
File dalam format ekstensi--version.sql berisi fungsi yang ingin Anda tambahkan.
Format file control file dalam ekstensi ini sama dengan file postgresql.conf, yaitu daftar parameter_name =nilai penugasan, satu per baris.
Contoh
Silakan periksa contoh lengkap ekstensi SQL-only di bawah ini, buat fungsi NVL yang kompatibel dengan Oracle di PostgreSQL. Ada banyak kasus tetapi di sini kita hanya dapat mempertimbangkan satu kasus saja.
File skrip SQL nvlfunc--1.0.sql terlihat seperti ini...
Nvlfunc--1.0.sql file:
--complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION nvlfunc" to load this file. \quit
CREATE OR REPLACE FUNCTION public.NVL(SMALLINT,SMALLINT)
RETURNS SMALLINT AS $$
SELECT COALESCE($1,$2);
$$ LANGUAGE SQL IMMUTABLE;
File kontrol nvlfunc terlihat seperti ini...
File Nvlfunc.control:
# nvlfunc extension
comment = 'Oracle compatible nvl function'
default_version = '1.0'
module_pathname = '$libdir/nvlfunc'
relocatable = false
Meskipun Anda hampir tidak memerlukan makefile untuk menginstal file-file ini ke direktori yang benar, Anda dapat menggunakan Makefile yang berisi ini:
Makefile:
EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
Jika Anda telah mengimplementasikan fungsi menggunakan bahasa 'C' maka Anda perlu menambahkan file di makefile.
Pemasangan
Perintah make install akan menginstal file kontrol dan file skrip sql ke direktori yang benar seperti yang dilaporkan oleh pg_config.
Setelah file terinstal, gunakan perintah CREATE EXTENSION untuk memuat objek ke database tertentu di PostgreSQL.
Silakan periksa langkah-langkah berikut untuk menginstal ekstensi nvlfunc dan Anda juga dapat menambahkan file ini di direktori ekstensi Anda:
INSTALL.nvlfunc file:
This module is a PostgreSQL extension which provides the Oracle compatible nvl function feature.
Use below command in source directory of nvlfunc to install the module.
make install
Then use the below command to create extension nvlfunc in database.
CREATE EXTENSION nvlfunc;
Use the below command to remove the nvlfunc extension from database.
DROP EXTENSION nvlfunc;
Use below command in source directory of nvlfunc to uninstall the module.
make uninstall
Note:
This extension module requires PostgreSQL 9.1 or later because CREATE EXTENSION
feature is available in PostgreSQL 9.1 and later version.
Ekstensi PostgreSQL harus diinstal di database Anda sebelum Anda dapat menggunakan fungsinya. Untuk menginstal ekstensi tertentu, jalankan perintah CREATE EXTENSION dari psql untuk memuat objek yang dikemas ke dalam database.
Unduh Whitepaper Hari Ini Pengelolaan &Otomatisasi PostgreSQL dengan ClusterControlPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan PostgreSQLUnduh WhitepaperPengujian
Setelah Anda membuat ekstensi, disarankan untuk membuat kasus uji untuk ekstensi tersebut sehingga saat Anda memasang modul ini di versi PostgreSQL yang berbeda, Anda kemudian dapat memeriksa apakah semua kasus uji berfungsi seperti yang diharapkan atau tidak.
Ini adalah langkah opsional tetapi Anda dapat membuatnya. Kasus uji terlihat seperti ini:
file sql/nvlfunc.sql:
SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
Kemudian Anda dapat menambahkan output yang diharapkan di file lain. File keluaran yang diharapkan terlihat seperti ini:
berkas yang diharapkan/nvlfunc.out:
SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
nvl
-----
11
(1 row)
Ini hanya satu contoh, itu sebabnya hanya satu kasus uji yang ditambahkan. Namun saat Anda membuat ekstensi baru, Anda dapat menambahkan lebih banyak kasus uji.
Struktur direktori ekstensi Nvlfunc:
# mkdir nvlfunc
# cd nvlfunc
# ls
Makefile nvlfunc.control nvlfunc--1.0.sql sql expected INSTALL.nvlfunc README
Pro
- Mudah untuk memperluas fungsionalitas PostgreSQL
- Sangat mudah untuk membuat dan memasang ekstensi
- Mudah untuk menguji regresi pada berbagai versi PostgreSQL
Kontra
- Tidak ada kekurangan khusus tetapi uji fitur yang Anda tambahkan di ekstensi sebelum Anda menggunakannya.
Kesimpulan
Ekstensibilitas PostgreSQL adalah fitur yang sangat kuat, Anda dapat membuat ekstensi Anda sendiri untuk kasus penggunaan tertentu dan menggunakannya dalam database produksi Anda. Ada banyak ekstensi yang didukung komunitas PostgreSQL seperti hstore, postgres_fdw, dblink dll. dan ekstensi pihak ketiga seperti Orafce, semuanya digunakan untuk kasus penggunaan tertentu.