Добавьте расширение plpython3 в образ Postgres/timescaledb Alpine Docker
Я пытаюсь добавить plpython3
продолжение моего timescaledb
/postgres
(на основе Linux Alpine) изображение:
FROM timescale/timescaledb:0.9.0-pg10
RUN set -ex \
&& apk add --no-cache --virtual .plpython3-deps --repository http://nl.alpinelinux.org/alpine/edge/testing \
postgresql-plpython3
Когда я пытаюсь создать расширение, я получаю следующую ошибку:
postgres=# CREATE EXTENSION plpython3u;
ERROR: could not open extension control file "/usr/local/share/postgresql/extension/plpython3u.control": No such file or directory
Но когда я ищу файлы внутри своего контейнера, я могу найти их в другом каталоге:
/ # find / -name '*plpy*'
/usr/lib/postgresql/plpython3.so
/usr/share/postgresql/extension/plpython3u.control
/usr/share/postgresql/extension/plpython3u--1.0.sql
/usr/share/postgresql/extension/plpython3u--unpackaged--1.0.sql
Как я могу установить postgresql-plpython3
в другой каталог или настроить postgres
распознать мое добавленное расширение?
Обновить
Когда я просто mv
файлы в /usr/local/share/postgresql/extension
Я получаю ошибку:
postgres=# CREATE EXTENSION plpython3u;
ERROR: could not access file "$libdir/plpython3": No such file or directory
Обновление 2
Так что проблема с $libdir
это было pg_config --pkglibdir
указывает на /usr/local/lib/postgresql
но plpython3.so
это внутри /usr/lib/postgresql
, Когда я двигаю все в соответствии /usr/local
каталоги я могу успешно создать расширение.
Это приводит к вопросу, где я надеюсь найти ответ. Как я могу установить postgresql-plpython3
в /usr/local/...
вместо /usr/...
?
2 ответа
Я совершенно уверен, что если вы используете готовые пакеты, вы застряли с жестко запрограммированными путями установки.
Самый простой способ решить вашу проблему - создать символические ссылки после установки:
FROM timescale/timescaledb:0.9.0-pg10
RUN set -ex \
&& apk add --no-cache --virtual .plpython3-deps --repository http://nl.alpinelinux.org/alpine/edge/testing \
postgresql-plpython3 \
&& ln -s /usr/lib/postgresql/plpython3.so /usr/local/lib/postgresql/plpython3.so \
&& ln -s /usr/share/postgresql/extension/plpython3u.control /usr/local/share/postgresql/extension/plpython3u.control \
&& ln -s /usr/share/postgresql/extension/plpython3u--1.0.sql /usr/local/share/postgresql/extension/plpython3u--1.0.sql \
&& ln -s /usr/share/postgresql/extension/plpython3u--unpackaged--1.0.sql /usr/local/share/postgresql/extension/plpython3u--unpackaged--1.0.sql
Просто настройте свойpostgresql.conf
для загрузки общих библиотек расширения по ожидаемому пути.
plpython3u.library_path = '/usr/lib'