В 2011 году я написал серию статей о PostgreSQL PL / Java . Основная информация по-прежнему достоверна, но теперь существует гораздо более простой способ установки PL / Java из исходных текстов. Это также устраняет необходимость зависеть от третьих сторон при создании пакетов. Эти заметки будут довольно краткими, так как я предполагаю, что мои читатели уже знакомы с git и maven.
(Примечание: я передал эту информацию команде PL / Java, поэтому она может быть обработана к тому времени, когда вы ее прочитаете.)
Выполнить базовую сборку
- Клонируйте репозиторий PL / Java по адресу https://github.com/tada/pljava .
- Беги мавен не делай.
- …
- Прибыль!
Конечно, не все так просто. Maven может извлекать свои собственные зависимости, но нам все еще нужно несколько специализированных библиотек, выходящих за рамки стандартного набора инструментов GNU. В моей системе Ubuntu мне нужно было:
- PostgreSQL-сервер DEV-9,4
- libpg-DEV
- libpgtypes3
- libecpg-DEV
(Я не знаю соответствующих имен пакетов для RedHat / Fedora / CentOS.)
Это может занять немного экспериментов, но не должно быть слишком сложно определить все пакеты, которые вам нужны. Просто помните, что вам обычно нужны пакеты с расширением «-dev».
Существует большое количество предупреждений и ошибок компилятора, но большинство, если не все, похоже, связаны с преобразованием знаков. Это требует дальнейшего расследования — предупреждения о преобразовании знаков указывают на возможные поверхности атаки со стороны злоумышленников — но на данный момент у нас все будет хорошо, пока maven будет успешным. Нам нужны три файла:
1
2
3
|
./src/sql/install.sql ./pljava/target/pljava- 0.0 . 2 -SNAPSHOT.jar ./pljava-so/target/nar/pljava-so- 0.0 . 2 -SNAPSHOT-i386-Linux-gpp-shared/lib/i386-Linux-gpp/shared/libpljava-so- 0.0 . 2 -SNAPSHOT.so |
Копирование файлов
Теперь мы можем скопировать три файла в их соответствующие местоположения.
1
2
3
4
5
6
|
$ sudo cp ./pljava-so/target/nar/pljava-so- 0.0 . 2 -SNAPSHOT-i386-Linux-gpp-shared/lib/i386-Linux-gpp/shared/libpljava-so- 0.0 . 2 -SNAPSHOT.so \ /usr/lib/postgresql/ 9.4 /lib/pljava.so $ sudo cp ./pljava/target/pljava- 0.0 . 2 -SNAPSHOT.jar /usr/share/postgresql/ 9.4 /extension/pljava-- 1.4 . 4 .jar $ sudo cp ./src/sql/install.sql /usr/share/postgresql/ 9.4 /extension/pljava-- 1.4 . 4 .sql |
Мы можем узнать правильный целевой каталог с помощью команды ‘pg_config’.
1
2
3
4
|
$ pg_config PKGLIBDIR = /usr/lib/postgresql/ 9.4 /lib SHAREDIR = /usr/share/postgresql/ 9.4 ... |
Я изменил версию с 0.0.2-SNAPSHOT на 1.4.4, так как мы хотим захватить версию PL / Java, а не версию pom.xml. Я надеюсь, что скоро они будут синхронизированы.
Редактирование pljava – 1.4.4.sql
Нам нужно добавить две строки для установки sql:
1
2
|
SET PLJAVA.CLASSPATH= '/usr/share/postgresql/9.4/extension/pljava--1.4.4.jar' ; SET PLJAVA.VMOPTIONS= '-Xms64M -Xmx128M' ; |
Важно помнить, что для каждого соединения с базой данных создается уникальная JVM. Потребление памяти может стать серьезной проблемой, если у вас более 20 одновременных подключений.
Создайте файл pljava.control
Мы должны сообщить PostgreSQL о новом расширении. Это обрабатывается контрольным файлом.
/usr/share/postgresql/9.4/extension/pljava.control
1
2
3
4
|
# pljava extension comment = 'PL/Java bundled as an extension' default_version = '1.4.4' relocatable = false |
Сделайте libjvm.so видимым
Обычно мы указываем расположение двоичных файлов java и разделяемых библиотек через переменную среды JAVA_HOME. Это не вариант с сервером базы данных.
Существует два подхода в зависимости от того, хотите ли вы сделать общую библиотеку Java (libjvm.so) видимой для всех приложений или только для сервера базы данных. Я думаю, что первое проще всего.
Нам нужно создать один файл
/etc/ld.so.conf.d/i386-linux-java.conf
1
|
/usr/lib/jvm/java- 8 -openjdk-i386/jre/lib/i386/server |
где большая часть пути происходит от JAVA_HOME. Местоположение может отличаться в вашей системе. Каталог должен содержать общую библиотеку ‘libjvm.so’.
Мы также должны сказать системе обновить свой кеш.
1
2
3
4
|
$ sudo ldconfig $ sudo ldconfig -p | grep jvm libjvm.so (libc6) => /usr/lib/jvm/java- 8 -openjdk-i386/jre/lib/i386/server/libjvm.so libjsig.so (libc6) => /usr/lib/jvm/java- 8 -openjdk-i386/jre/lib/i386/server/libjsig.so |
Загрузка расширения
Теперь мы можем легко загружать и выгружать PL / Java.
1
2
3
4
5
|
=> CREATE EXTENSION pljava; CREATE EXTENSION => DROP EXTENSION pljava; DROP EXTENSION |
В случае облезлости …
Если система кажется некорректной, вы можете переместить две команды set в файл postgresql.conf.
/etc/postgresql/9.4/main/postgresql.conf
1
2
3
4
5
6
7
8
|
#------------------------------------------------------------------------------ # CUSTOMIZED OPTIONS #------------------------------------------------------------------------------ # Add settings for extensions here PLJAVA.CLASSPATH= '/usr/share/postgresql/9.4/extension/pljava--1.4.4.jar' PLJAVA.VMOPTIONS= '-Xms64M -Xmx128M' |
Ссылка: | Установка PostgreSQL PL / Java в качестве расширения PostgreSQL от нашего партнера по JCG Bear Giles в блоге Invariant Properties . |