Giới thiệu
Như bạn có thể biết, PostgreSQL được thiết kế để có thể mở rộng và tùy chỉnh, điều này có nghĩa là chúng tôi có thể mở rộng chức năng của cơ sở dữ liệu của bạn bằng cách sử dụng các tiện ích mở rộng. Chức năng mở rộng PostgreSQL cho phép gói nhiều đối tượng SQL lại với nhau trong một gói duy nhất có thể được tải hoặc xóa khỏi cơ sở dữ liệu của bạn. Sau khi bạn tải nó vào cơ sở dữ liệu của mình, các tiện ích mở rộng có thể hoạt động như các tính năng được tích hợp sẵn.
Cơ sở dữ liệu PostgreSQL có nhiều tính năng và cung cấp nhiều loại dữ liệu, hàm, toán tử, v.v. Nhưng đôi khi nó không đủ cho một số trường hợp sử dụng. Chúng ta có thể dễ dàng mở rộng chức năng của PostgreSQL thông qua các phần mở rộng. Đây là tính năng rất hữu ích cho các nhà phát triển và quản trị cơ sở dữ liệu.
Trong blog này, chúng tôi có thể đề cập đến hai điều bên dưới.
- Cách sử dụng tiện ích mở rộng được cộng đồng hỗ trợ PostgreSQL
- Cách tạo và sử dụng tiện ích mở rộng trong PostgreSQL
Cách sử dụng các tiện ích mở rộng được cộng đồng hỗ trợ của PostgreSQL
Có một số mô-đun / phần mở rộng đóng góp trong PostgreSQL. Các mô-đun này được duy trì bởi cộng đồng PostgreSQL. Chúng tôi có thể sử dụng các mô-đun này và chức năng của nó trong PostgreSQL bằng cách tạo tiện ích mở rộng.
Hãy xem cách sử dụng chức năng của phần mở rộng hstore trong PostgreSQL.
Tiện ích mở rộng Hstore
Mô-đun hstore triển khai kiểu dữ liệu hstore lưu trữ các cặp khóa-giá trị trong một giá trị duy nhất. Chúng ta có thể sử dụng kiểu dữ liệu hstore trong nhiều trường hợp, chẳng hạn như dữ liệu bán cấu trúc hoặc các hàng có nhiều thuộc tính hiếm khi được truy vấn. Lưu ý rằng các khóa và giá trị chỉ là chuỗi văn bản. Để sử dụng chức năng này, chúng ta cần tạo phần mở rộng cho nó trong PostgreSQL.
Hãy xem cách sử dụng kiểu dữ liệu hstore.
CREATE TABLE books (
book_code serial primary key,
book_title VARCHAR (20),
attr hstore
);
Trước khi tạo kiểu dữ liệu hstore, bạn cần bật tiện ích mở rộng hstore tải mô-đun đóng góp vào PostgreSQL của bạn.
CREATE EXTENSION hstore;
Có nhiều chức năng hstore khác nhau để lấy dữ liệu từ cơ sở dữ liệu. Bạn có thể kiểm tra các chức năng và ví dụ tại đây.
Vui lòng kiểm tra các mô-đun được cung cấp thêm trong PostgreSQL.
Cách tạo tiện ích mở rộng
Khả năng mở rộng là một trong những tính năng mạnh mẽ nhất trong PostgreSQL. Bạn có thể thêm chức năng mới cho một trường hợp sử dụng cụ thể bằng cách sử dụng mô-đun đóng góp và cài đặt nó bằng cách sử dụng TẠO MỞ RỘNG.
Trong phần này, chúng ta sẽ tìm hiểu cách tạo một mô-đun đóng góp đơn giản và cách sử dụng chức năng của nó trong PostgreSQL.
Tệp mở rộng
Để có thể chạy lệnh TẠO MỞ RỘNG trong cơ sở dữ liệu của bạn, tiện ích mở rộng của bạn phải cần ít nhất hai tệp:
- Tệp điều khiển
Định dạng tệp phải là extension_name.control, cho biết những điều cơ bản về phần mở rộng cho PostgreSQL và phải được đặt trong thư mục SHAREDIR / extension của cài đặt. - Tệp tập lệnh SQL
Tệp có phần mở rộng định dạng - version.sql chứa các chức năng mà bạn muốn thêm.
Định dạng tệp của tệp điều khiển trong phần mở rộng giống như tệp postgresql.conf, cụ thể là danh sách các phép gán tham số_name =giá trị, mỗi lần một dòng.
Ví dụ
Vui lòng kiểm tra ví dụ đầy đủ dưới đây về tiện ích mở rộng chỉ dành cho SQL, tạo hàm NVL tương thích với Oracle trong PostgreSQL. Có rất nhiều trường hợp nhưng ở đây chúng ta chỉ có thể xem xét một trường hợp ví dụ.
Tệp tập lệnh SQL nvlfunc - 1.0.sql trông như thế này ...
Nvlfunc - tệp 1.0.sql:
--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;
Tệp điều khiển nvlfunc trông giống như thế này ...
Tệp nvlfunc.conntrol:
# nvlfunc extension
comment = 'Oracle compatible nvl function'
default_version = '1.0'
module_pathname = '$libdir/nvlfunc'
relocatable = false
Mặc dù bạn hầu như không cần tệp makefile để cài đặt các tệp này vào đúng thư mục, nhưng bạn có thể sử dụng Makefile chứa tệp này:
Makefile:
EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
Nếu bạn đã triển khai hàm bằng ngôn ngữ ‘C’ thì bạn cần thêm tệp vào makefile.
Cài đặt
Lệnh make install sẽ cài đặt tệp điều khiển và tệp kịch bản sql vào đúng thư mục như được báo cáo bởi pg_config.
Sau khi các tệp được cài đặt, hãy sử dụng lệnh TẠO MỞ RỘNG để tải các đối tượng vào bất kỳ cơ sở dữ liệu cụ thể nào trong PostgreSQL.
Vui lòng kiểm tra các bước sau để cài đặt phần mở rộng nvlfunc và bạn cũng có thể thêm tệp này vào thư mục phần mở rộng của mình:
Tệp INSTALL.nvlfunc:
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.
Các phần mở rộng PostgreSQL phải được cài đặt trong cơ sở dữ liệu của bạn trước khi bạn có thể sử dụng chức năng của chúng. Để cài đặt một tiện ích mở rộng cụ thể, hãy chạy lệnh TẠO MỞ RỘNG từ psql để tải các đối tượng được đóng gói vào cơ sở dữ liệu.
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thứcThử nghiệm
Sau khi tạo tiện ích mở rộng, bạn nên tạo một trường hợp thử nghiệm cho tiện ích mở rộng đó để khi bạn cài đặt mô-đun này trong một phiên bản PostgreSQL khác, sau đó bạn có thể kiểm tra xem tất cả các trường hợp thử nghiệm có hoạt động như mong đợi hay không.
Đây là bước không bắt buộc nhưng bạn có thể tạo. Các trường hợp thử nghiệm trông như thế này:
Tệp sql / nvlfunc.sql:
SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
Sau đó, bạn có thể thêm đầu ra dự kiến trong một tệp khác. Tệp đầu ra mong đợi trông giống như sau:
tệp tin / nvlfunc.out được mong đợi:
SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
nvl
-----
11
(1 row)
Đây chỉ là một ví dụ, đó là lý do tại sao chỉ có một trường hợp thử nghiệm được thêm vào. Nhưng khi bạn đang tạo một tiện ích mở rộng mới, bạn có thể thêm nhiều trường hợp thử nghiệm hơn.
Cấu trúc thư mục tiện ích mở rộng Nvlfunc:
# mkdir nvlfunc
# cd nvlfunc
# ls
Makefile nvlfunc.control nvlfunc--1.0.sql sql expected INSTALL.nvlfunc README
Ưu điểm
- Dễ dàng mở rộng chức năng PostgreSQL
- Rất dễ tạo và cài đặt tiện ích mở rộng
- Dễ dàng kiểm tra các hồi quy trên các phiên bản PostgreSQL khác nhau
Nhược điểm
- Không có khuyết điểm đặc biệt nhưng hãy kiểm tra tính năng bạn đang thêm vào tiện ích trước khi sử dụng.
Kết luận
Khả năng mở rộng của PostgreSQL là một tính năng rất mạnh mẽ, bạn có thể tạo tiện ích mở rộng của riêng mình cho các trường hợp sử dụng cụ thể và sử dụng nó trong cơ sở dữ liệu sản xuất của bạn. Có nhiều tiện ích mở rộng được cộng đồng PostgreSQL hỗ trợ như hstore, postgres_fdw, dblink, v.v. và các tiện ích mở rộng của bên thứ ba như Orafce, tất cả đều được sử dụng cho các trường hợp sử dụng cụ thể.