将 plpython3 扩展添加到 Postgres/timescaledb Alpine Docker 图像
Add plpython3 Extension to Postgres/timescaledb Alpine Docker Image
我尝试将 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/...
?
我相当确定,如果您使用预构建的软件包,您会被硬编码的安装路径卡住。
解决问题的最简单方法是在安装后创建符号链接:
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
我尝试将 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/...
?
我相当确定,如果您使用预构建的软件包,您会被硬编码的安装路径卡住。
解决问题的最简单方法是在安装后创建符号链接:
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