Въведение
Както може би знаете, PostgreSQL е проектиран за разширяемост и персонализиране, това означава, че можем да разширим функционалността на вашата база данни с помощта на разширения. Функционалността на разширението на PostgreSQL позволява обединяване на множество SQL обекти заедно в един пакет, който може да бъде зареден или премахнат от вашата база данни. След като го заредите във вашата база данни, разширенията могат да функционират като вградени функции.
PostgreSQL базата данни има много функции и предлага широк спектър от типове данни, функции, оператори и т.н. Но понякога това не е достатъчно за някои случаи на употреба. Можем лесно да разширим функционалността на PostgreSQL чрез разширения. Това е много полезна функция за разработчиците на бази данни и администраторите.
В този блог можем да разгледаме две неща по-долу.
- Как да използвате разширение, поддържано от PostgreSQL общността
- Как да създадете и използвате разширение в PostgreSQL
Как да използвате разширения, поддържани от PostgreSQL общността
Има редица модули/разширения за принос в PostgreSQL. Тези модули се поддържат от PostgreSQL общността. Можем да използваме тези модули и тяхната функционалност в PostgreSQL, като създадем разширение.
Нека видим как да използваме функционалността на разширението hstore в PostgreSQL.
Разширение на Hstore
Модулът hstore реализира тип данни hstore, който съхранява двойки ключ-стойност в една стойност. Можем да използваме тип данни hstore в много случаи, като например полуструктурирани данни или редове с много атрибути, които рядко се заявяват. Имайте предвид, че ключовете и стойностите са само текстови низове. За да използваме тази функционалност, трябва да създадем разширение за нея в PostgreSQL.
Нека видим как да използваме тип данни hstore.
CREATE TABLE books (
book_code serial primary key,
book_title VARCHAR (20),
attr hstore
);
Преди да създадете типа данни hstore, трябва да активирате разширението hstore, което зарежда модула contrib във вашия PostgreSQL.
CREATE EXTENSION hstore;
Има различни hstore функции за извличане на данни от базата данни. Можете да проверите функциите и примерите тук.
Моля, проверете допълнителните предоставени модули в PostgreSQL.
Как да създадете разширение
Разширяемостта е една от най-мощните функции в PostgreSQL. Можете да добавите нова функционалност за конкретен случай на употреба, като използвате модул contrib и да го инсталирате чрез CREATE EXTENSION.
В този раздел ще научим как да създадем прост модул за принос и как да използваме неговата функционалност в PostgreSQL.
Разширителни файлове
За да можете да стартирате командата CREATE EXTENSION във вашата база данни, вашето разширение трябва да се нуждае от поне два файла:
- Контролен файл
Файловият формат трябва да е extension_name.control, който разказва основите за разширението към PostgreSQL и трябва да бъде поставен в директорията SHAREDIR/разширения на инсталацията. - SQL скрипт файл
Файлът с разширението на формата --version.sql съдържа функциите, които искате да добавите.
Файловият формат на контролния файл в разширението е същият като файла postgresql.conf, а именно списък с присвояване на parameter_name =value, по едно на ред.
Пример
Моля, проверете пълния пример по-долу за разширение само за SQL, създайте съвместима с Oracle NVL функция в PostgreSQL. Има много случаи, но тук можем да разгледаме само един случай например.
SQL скриптовият файл nvlfunc--1.0.sql изглежда така...
Nvlfunc--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;
Контролният файл nvlfunc изглежда така...
Файл Nvlfunc.conntrol:
# nvlfunc extension
comment = 'Oracle compatible nvl function'
default_version = '1.0'
module_pathname = '$libdir/nvlfunc'
relocatable = false
Макар че едва ли се нуждаете от makefile, за да инсталирате тези файлове в правилната директория, можете да използвате Makefile, съдържащ това:
Makefile:
EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
Ако сте внедрили функцията с помощта на език „C“, тогава трябва да добавите файла в make файла.
Инсталиране
Командата make install ще инсталира контролния файл и sql скриптовия файл в правилната директория, както се съобщава от pg_config.
След като файловете бъдат инсталирани, използвайте командата CREATE EXTENSION, за да заредите обектите във всяка конкретна база данни в PostgreSQL.
Моля, проверете следните стъпки, за да инсталирате разширението nvlfunc и можете също да добавите този файл във вашата директория с разширения:
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.
Разширенията на PostgreSQL трябва да бъдат инсталирани във вашата база данни, преди да можете да използвате тяхната функционалност. За да инсталирате конкретно разширение, изпълнете командата CREATE EXTENSION от psql, за да заредите пакетираните обекти в базата данни.
Изтеглете Бялата книга днес Управление и автоматизация на PostgreSQL с ClusterControl Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате PostgreSQLD Изтеглете Бялата книгаТестване
След като създадете разширението, се препоръчва да създадете тестов случай за това разширение, така че когато инсталирате този модул в различна версия на PostgreSQL, можете да проверите дали всички тестови случаи работят според очакванията или не.
Това е незадължителна стъпка, но можете да я създадете. Тестовите случаи изглеждат така:
sql/nvlfunc.sql файл:
SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
След това можете да добавите очаквания изход в друг файл. Очакваният изходен файл изглежда така:
очакван/nvlfunc.out файл:
SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
nvl
-----
11
(1 row)
Това е само един пример, затова е добавен само един тестов случай. Но когато създавате ново разширение, можете да добавите още тестови случаи.
Структура на директория с разширение Nvlfunc:
# mkdir nvlfunc
# cd nvlfunc
# ls
Makefile nvlfunc.control nvlfunc--1.0.sql sql expected INSTALL.nvlfunc README
Плюсове
- Лесно разширяване на функционалността на PostgreSQL
- Много лесно за създаване и инсталиране на разширението
- Лесен за тестване за регресия в различни версии на PostgreSQL
Против
- Няма специални минуси, но тествайте функцията, която добавяте в разширението, преди да го използвате.
Заключение
Разширяемостта на PostgreSQL е много мощна функция, можете да създадете свое собствено разширение за конкретни случаи на употреба и да го използвате във вашата производствена база данни. Има много поддържани от общността PostgreSQL разширения като hstore, postgres_fdw, dblink и др. и разширения на трети страни като Orafce, всички използвани за конкретни случаи на употреба.