Добавьте расширение 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'
Другие вопросы по тегам