Перейти к основному содержимому

Devel-пакет для компонента Pangolin DBMS

Описание

Функциональность реализует devel-пакет для компонента Pangolin DBMS, позволяющий пользователям самостоятельно собирать расширения, совместимые с ванильным ABI PostgreSQL.

В дистрибутиве СУБД Pangolin поставляется rpm/deb-пакет в формате: pangolin-dbms-{short_version}-devel-{product_version}-{OS}.x86_64.rpm в рамках архива owned-части.

Структура пакета:

ПутьНазначение
/usr/pangolin-dbms-devel-{short_version}/includeHeader-файлы с кодом на языке C, содержащие внешние функции ядра Pangolin
/usr/pangolin-dbms-devel-{short_version}/include/serverBackend header-файлы. При подключении префикс server не требуется
/usr/pangolin-dbms-devel-{short_version}/include/internalFrontend header-файлы. При подключении префикс internal не требуется
/usr/pangolin-dbms-devel-{short_version}/libДинамические библиотеки, необходимые для сборки расширений (например, libpq.so)
/usr/pangolin-dbms-devel-{short_version}/lib/pgxsMakefile-файлы, необходимые для сборки расширений
/usr/pangolin-dbms-devel-{short_version}/bin/pg_configУтилита для получения путей к компонентам при сборке расширения

Установка пакета

sudo dnf install pangolin-dbms-{short_version}-devel-{product_version}-{OS}.x86_64.rpm -y
Подсказка

Пример заполненной команды:

sudo dnf -y install  pangolin-dbms-6.7-devel-6.7.6-{OS}.x86_64.rpm

При установке pangolin-dbms-devel, rpm/deb-пакет создает, либо обновляет все файлы, перечисленные в пакете. Если какой-либо из этих путей уже принадлежит другому установленному пакету, пакет зафиксирует конфликт и установка будет прервана. Если же файл существует в системе, но не зарегистрирован за каким-либо пакетом, он будет перезаписан содержимым из rpm/deb-пакета.

примечание

Также можно извлечь файлы rpm/deb-пакета в отдельную папку специальными утилитами (например, rpm2cpio) и собирать расширения, указав путь до pg_config.

Удаление пакета

Удалите пакет с помощью пакетного менеджера. Пример команды:

sudo dnf remove -y pangolin-dbms-{short_version}-devel

После удаления rpm/deb-пакета удалятся файлы по структуре пакета. Если файлы были перезаписаны, предыдущие версии не восстановятся.

Разработка и сборка расширения

После установки pangolin-dbms-devel и необходимых инструментов разработки (gcc, make и других) можно начать разрабатывать и/или собирать расширение.

Пример структуры расширения extension_name:

extension_name/
├── extension_name.control
├── extension_name--1.0.sql
├── extension_name.c
└── Makefile

Содержимое Makefile:

MODULE_big = extension_name
OBJS = extension_name.o
EXTENSION = extension_name
DATA = extension_name--1.0.sql
# Если pg_config не находится в PATH, тогда здесь нужно указать полный путь:
# PG_CONFIG = /usr/pangolin-dbms-devel-{short_version}/bin/pg_config
PG_CONFIG = pg_config

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

Сборка и установка расширения

После реализации расширения его можно собрать и установить:

make && make install DESTDIR=$(pwd)/tmp_install

В результате выполнения:

  • В каталоге tmp_install/usr/pangolin-dbms-devel-{short_version}/lib будет находиться .so-файл.
  • В tmp_install/usr/pangolin-dbms-devel-{short_version}/share/extension.sql и .control файлы.

Скопируйте содержимое tmp_install в соответствующие папки в /usr/pangolin-{short_version}/ с правами пользователя postgres. После этого расширение можно создавать в БД.

Если расширение разрабатывалось там, где установлен Pangolin, тогда можно сразу установить расширение (от пользователя postgres или через sudo):

make
make install \
pkglibdir=/usr/pangolin-{short_version}/lib \
datadir=/usr/pangolin-{short_version}/share \
docdir=/usr/pangolin-{short_version}/doc \
bindir=/usr/pangolin-{short_version}/bin \
localedir=/usr/pangolin-{short_version}/share/locale \
mandir=/usr/pangolin-{short_version}/share/man

В Makefile можно добавить тесты с использованием переменных REGRESS или TAP_TESTS и запустить тесты командой:

make installcheck bindir=/usr/pangolin-6.7/bin

Ограничения

ОграничениеПояснение
Несовместимость ванильных расширенийНекоторые стандартные расширения PostgreSQL могут не работать с Pangolin без доработки кода
Отсутствие некоторых функций Pangolin в header-файлахНе все функции Pangolin включены в devel-пакет. Вследствие этого, не все расширения Pangolin или модифицированные ванильные расширения могут быть собраны с помощью данного пакета
Отсутствие зависимостей при установкеПри установке RPM-пакета не проверяется наличие и установка набора разработки (gcc, make и других)
Проблемы при использовании на других дистрибутивахИспользование devel-пакета на дистрибутивах, отличных от того, где установлен Pangolin, может привести к ошибкам из-за несовместимости системных библиотек (например, /lib64/libc.so.6)
Требование обновления расширений при смене версии PangolinПри переходе на новую версию Pangolin необходимо пересобирать и обновлять все установленные расширения

Права доступа

Для установки rpm/deb-пакета необходимо обладать правами sudo.

Установленные файлы имеют права доступа:

Тип файлаПраваВладелец:Группа
Папкиdrwxr-xr-xroot:root
Бинарные файлы-rwxr-xr-xroot:root
Динамические библиотеки-rwxr-xr-xroot:root
Остальные файлы-rw-r--r--root:root

Если файлы извлекаются из пакета с помощью утилит (например, rpm2cpio) в отдельную папку, владельцем становится текущий пользователь.