Установка и обновление PLV8
Расширение PostgreSQL, включающее возможность использования JavaScript в роли процедурного языка - проект с открытым кодом PLV8. Но в этом проекте не учитывается ограничения поставки расширения пакетами и работы в Docker-контейнерах.
Установка и обновление PLV8
Инструкции сборки предполагают создание библиотеки с именем, включающем версию библиотеки, например:
plv8-3.2.1.so
Долгое время мы собирали это расширение в соответсвии с инструкциями сборки из публичного репозитория. Но при обновлениии пакета расширения мы получаем невозможность обновить расширение в БД и потерю работоспособности, после перезапуска экземпляра Postgres.
Варианты решения
При обновлении пакета есть только 2 НЕ СТАНДАРТНЫЕ возможности обновить версию расширения в БД:
1) После установки нового пакета создать symlink на новую версию библиотеки с именем, соответсвующим предыдущей установленной версии. Например, для PostgreSQL 15 на ОС Rocky 9:
ln -s /usr/lib64/pgsql/plv8.so /usr/lib64/pgsql/plv8-3.2.1.so
После чего нужно выполнить от имени суперпользователю БД, postgres, команду:
ALTER EXTENSION plv8 UPDATE;
2) Обновить информацию о расширении в системных таблицах БД mi:
# Проверка наличия расширенияв конкретной БД
select * from pg_catalog.pg_extension where extname like 'plv8%';
# Обновлении имени библиотеки, для исключения версии из имени
update pg_catalog.pg_extension set extname='plv8' where extname like 'plv8%';
Установка версии PLV8 3.2.2
Основные требования:
- До обновления PLV8 зафиксируйте версию текущую версию расширения.
- До окончания обновления расширения не допускайте перезапуска основного процесса PostgreSQL
После установки пакета расширения для необходимой Вам ОС и версии Postgres, Вам нужно воспользоваться одним из вариантов решения, описанных выше.
Дальнейшее обновление расширений PLV8
Начиная с версии 3.2.2 мы внесли изменения в сценарий сборки расширения - теперь библиотека расширения собирается без упоминания версии в имени.
Что позволяет выполнять обновление версии расширения в БД, после установки пакета с обновлением RPM/DEB, СТАНДАРТНОЙ командой:
ALTER EXTENSION plv8 UPDATE;
для этой и всех последующих версий пакета расширеня PLV8 публикующихся в наших репозиториях.
Пакеты расширения PLV8 собираются под все, поддерживаемые нами ОС. Для “ванильного” PostgreSQL, Postgres Pro и Jatoba. Доступны, без ограничений в наших репозиториях:
- thirdparty - для дистрибутивов ОС на базе RPM
- thirdparty-alse17 - для ОС Astra Linux Special Edition 1.7
- thirdparty-alse18 - для ОС Astra Linux Special Edition 1.8