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

Установка и обновление 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

Основные требования:

  1. До обновления PLV8 зафиксируйте версию текущую версию расширения.
  2. До окончания обновления расширения не допускайте перезапуска основного процесса 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