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}/include | Header-файлы с кодом на языке C, содержащие внешние функции ядра Pangolin |
/usr/pangolin-dbms-devel-{short_version}/include/server | Backend header-файлы. При подключении префикс server не требуется |
/usr/pangolin-dbms-devel-{short_version}/include/internal | Фронтенд header-файлы. При подключении префикс internal не требуется |
/usr/pangolin-dbms-devel-{short_version}/lib | Динамические библиотеки, необходимые для сборки расширений (например, libpq.so) |
/usr/pangolin-dbms-devel-{short_version}/lib/pgxs | Makefile-файлы, необходимые для сборки расширений |
/usr/pangolin-dbms-devel-{short_version}/bin/pg_config | Утилита для получения путей к компонентам при сборке расширения |
Установка пакета
- SberLinux, РЕД ОС, CentOS
- Astra Linux
- Альт СП
sudo dnf install pangolin-dbms-{short_version}-devel-{product_version}-{OS}.x86_64.rpm -y
sudo dpkg -i pangolin-dbms-{short_version}-devel_{product_version}_amd64.deb
sudo apt-get install pangolin-dbms-{short_version}-devel-{product_version}-{OS}.x86_64.rpm -y
Пример заполненной команды:
sudo dnf -y install pangolin-dbms-8.2-devel-8.2.0-{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-x | root:root |
| Бинарные файлы | -rwxr-xr-x | root:root |
| Динамические библиотеки | -rwxr-xr-x | root:root |
| Остальные файлы | -rw-r--r-- | root:root |
Если файлы извлекаются из пакета с помощью утилит (например, rpm2cpio) в отдельную папку, владельцем становится текущий пользователь.