Добавление расширения 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/...?


person Yannic Hamann    schedule 20.03.2018    source источник
comment
попробуйте один из них в вашем dockerfile COPY pg_config /usr/local/bin/pg_config RUN chmod a+x /usr/local/bin/pg_config #используя попробуйте # RUN sed -i '/PKGLIBDIR = /usr/local/lib/ postgresql/c\/PKGLIBDIR = /usr/share/postgresql' /usr/local/bin/pg_config #второй вариант создания полуссылки # RUN ln -s /usr/share/postgresql/extension/plpython3u.control /usr/local/ доля/postgresql/расширение/plpython3u.control   -  person Adiii    schedule 20.03.2018


Ответы (1)


Я совершенно уверен, что если вы используете готовые пакеты, вы застряли с жестко заданными путями установки.

Самый простой способ обойти вашу проблему — создать символические ссылки после установки:

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
person Konrad Botor    schedule 04.04.2019