PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Tworzenie nowych modułów za pomocą rozszerzenia PostgreSQL Create

Wprowadzenie

Jak być może wiesz, PostgreSQL jest przeznaczony do rozszerzania i dostosowywania, co oznacza, że ​​możemy rozszerzyć funkcjonalność Twojej bazy danych za pomocą rozszerzeń. Funkcjonalność rozszerzenia PostgreSQL pozwala na łączenie wielu obiektów SQL w jeden pakiet, który można załadować lub usunąć z bazy danych. Po załadowaniu go do bazy danych rozszerzenia mogą działać jako funkcje wbudowane.

Baza danych PostgreSQL ma wiele funkcji i oferuje szeroki zakres typów danych, funkcji, operatorów itp. Jednak w niektórych przypadkach to nie wystarcza. Możemy łatwo rozszerzyć funkcjonalność PostgreSQL poprzez rozszerzenia. Jest to bardzo przydatna funkcja dla programistów i administratorów baz danych.

W tym blogu możemy omówić dwie rzeczy poniżej.

  1. Jak używać rozszerzenia obsługiwanego przez społeczność PostgreSQL
  2. Jak tworzyć i używać rozszerzenia w PostgreSQL

Jak używać rozszerzeń obsługiwanych przez społeczność PostgreSQL

Istnieje wiele modułów/rozszerzeń contrib w PostgreSQL. Te moduły są utrzymywane przez społeczność PostgreSQL. Możemy użyć tych modułów i ich funkcjonalności w PostgreSQL, tworząc rozszerzenie.

Zobaczmy, jak wykorzystać funkcjonalność rozszerzenia hstore w PostgreSQL.

Rozszerzenie Hstore

Moduł hstore implementuje typ danych hstore, który przechowuje pary klucz-wartość w jednej wartości. Możemy użyć typu danych hstore w wielu przypadkach, takich jak dane częściowo ustrukturyzowane lub wiersze z wieloma atrybutami, które rzadko są odpytywane. Pamiętaj, że klucze i wartości to tylko ciągi tekstowe. Aby korzystać z tej funkcjonalności, musimy stworzyć dla niej rozszerzenie w PostgreSQL.

Zobaczmy, jak używać typu danych hstore.

CREATE TABLE books (
 book_code serial primary key,
 book_title VARCHAR (20),
 attr hstore
);

Przed utworzeniem typu danych hstore musisz włączyć rozszerzenie hstore, które ładuje moduł contrib do twojego PostgreSQL.

CREATE EXTENSION hstore;

Istnieje wiele funkcji hstore do pobierania danych z bazy danych. Możesz sprawdzić funkcje i przykłady tutaj.

Sprawdź dodatkowe moduły dostarczone w PostgreSQL.

Jak utworzyć rozszerzenie

Rozszerzalność jest jedną z najpotężniejszych funkcji PostgreSQL. Możesz dodać nową funkcjonalność dla konkretnego przypadku użycia za pomocą modułu contrib i zainstalować go za pomocą CREATE EXTENSION.

W tej sekcji dowiemy się, jak stworzyć prosty moduł contrib i jak korzystać z jego funkcjonalności w PostgreSQL.

Pliki rozszerzeń

Aby móc uruchomić polecenie CREATE EXTENSION w Twojej bazie danych, Twoje rozszerzenie musi wymagać co najmniej dwóch plików:

  1. Plik kontrolny
    Formatem pliku musi być nazwa_rozszerzenia.control, który zawiera podstawowe informacje o rozszerzeniu do PostgreSQL i musi być umieszczony w katalogu instalacji SHAREDIR/rozszerzenie.
  2. Plik skryptu SQL
    Plik w formacie z rozszerzeniem --version.sql zawiera funkcje, które chciałbyś dodać.

Format pliku kontrolnego w rozszerzeniu jest taki sam jak plik postgresql.conf, a mianowicie lista parametrów nazwa_parametrów =przypisania wartości, po jednym w wierszu.

Przykład

Sprawdź poniższy kompletny przykład rozszerzenia tylko do SQL, utwórz funkcję NVL zgodną z Oracle w PostgreSQL. Jest wiele przypadków, ale tutaj możemy na przykład rozważyć tylko jeden przypadek.

Plik skryptu SQL nvlfunc--1.0.sql wygląda tak...

Plik 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;

Plik kontrolny nvlfunc wygląda tak...

Plik Nvlfunc.control:

# nvlfunc extension
comment = 'Oracle compatible nvl function'
default_version = '1.0'
module_pathname = '$libdir/nvlfunc'
relocatable = false

Chociaż prawie nie potrzebujesz pliku makefile, aby zainstalować te pliki we właściwym katalogu, możesz użyć pliku Makefile zawierającego:

Makefile:

EXTENSION = nvlfunc
DATA = nvlfunc--1.0.sql

PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)

Jeśli zaimplementowałeś funkcję przy użyciu języka „C”, musisz dodać plik w pliku makefile.

Instalacja

Polecenie make install zainstaluje plik kontrolny i plik skryptu sql we właściwym katalogu, zgodnie z raportem pg_config.

Po zainstalowaniu plików użyj polecenia CREATE EXTENSION, aby załadować obiekty do dowolnej bazy danych w PostgreSQL.

Sprawdź następujące kroki, aby zainstalować rozszerzenie nvlfunc. Możesz także dodać ten plik do katalogu rozszerzenia:

Plik 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.

Rozszerzenia PostgreSQL muszą być zainstalowane w Twojej bazie danych, zanim będziesz mógł korzystać z ich funkcji. Aby zainstalować określone rozszerzenie, uruchom polecenie CREATE EXTENSION z psql, aby załadować spakowane obiekty do bazy danych.

Pobierz oficjalny dokument już dziś Zarządzanie i automatyzacja PostgreSQL za pomocą ClusterControlDowiedz się, co musisz wiedzieć, aby wdrażać, monitorować, zarządzać i skalować PostgreSQLPobierz oficjalny dokument

Testowanie

Po utworzeniu rozszerzenia zaleca się utworzenie przypadku testowego dla tego rozszerzenia, aby podczas instalacji tego modułu w innej wersji PostgreSQL można było sprawdzić, czy wszystkie przypadki testowe działają zgodnie z oczekiwaniami.

Jest to krok opcjonalny, ale możesz go utworzyć. Przypadki testowe wyglądają tak:

plik sql/nvlfunc.sql:

SELECT NVL(NULL::SMALLINT, 11::SMALLINT);

Następnie możesz dodać oczekiwane wyjście w innym pliku. Oczekiwany plik wyjściowy wygląda tak:

oczekiwany plik/nvlfunc.out:

SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
 nvl 
-----
  11
(1 row)

To tylko jeden przykład, dlatego dodawany jest tylko jeden przypadek testowy. Ale kiedy tworzysz nowe rozszerzenie, możesz dodać więcej przypadków testowych.

Struktura katalogów rozszerzeń Nvlfunc:

# mkdir nvlfunc
# cd nvlfunc
# ls
Makefile         nvlfunc.control    nvlfunc--1.0.sql    sql     expected    INSTALL.nvlfunc    README

Zalety

  1. Łatwe do rozszerzenia funkcjonalności PostgreSQL
  2. Bardzo łatwe do utworzenia i zainstalowania rozszerzenia
  3. Łatwe do testowania pod kątem regresji w różnych wersjach PostgreSQL

Wady

  1. Nie ma żadnych specjalnych wad, ale przetestuj funkcję, którą dodajesz w rozszerzeniu, zanim go użyjesz.

Wniosek

Rozszerzalność PostgreSQL to bardzo potężna funkcja, możesz stworzyć własne rozszerzenie dla konkretnych przypadków użycia i użyć go w swojej produkcyjnej bazie danych. Istnieje wiele rozszerzeń obsługiwanych przez społeczność PostgreSQL, takich jak hstore, postgres_fdw, dblink itp. oraz rozszerzenia stron trzecich, takie jak Orafce, wszystkie używane w określonych przypadkach użycia.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zachowanie NOT LIKE z wartościami NULL

  2. Audyt PostgreSQL za pomocą pgAudit

  3. Najlepsze praktyki bezpieczeństwa PostgreSQL

  4. Heroku Postgres:psql:FATAL:brak wpisu pg_hba.conf dla hosta

  5. Dopełnianie zer z lewej strony w postgreSQL