将plpython3扩展添加到Postgres/timescaledb Alpine Docker镜像

10

我尝试将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/...


尝试在您的Dockerfile中使用其中一个:COPY pg_config /usr/local/bin/pg_configRUN chmod a+x /usr/local/bin/pg_config

使用try it

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/share/postgresql/extension/plpython3u.control

- Adiii
2个回答

7

我相当确定如果你使用预构建的软件包,你将会被限制在硬编码的安装路径中。

解决问题最简单的方法是在安装后创建符号链接:

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

1
只需将您的postgresql.conf配置为从预期路径加载扩展共享库。
plpython3u.library_path = '/usr/lib'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接