You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何为PostgreSQL/TimescaleDB Alpine Docker镜像添加plpython3扩展

解决TimescaleDB/PostgreSQL Alpine镜像中plpython3u扩展找不到控制文件的问题

我来帮你搞定这个问题!你遇到的错误核心原因是:Alpine包管理器安装的plpython3扩展文件路径,和TimescaleDB镜像里PostgreSQL的默认搜索路径不匹配。

问题拆解

你使用的timescale/timescaledb:0.9.0-pg10镜像基于Alpine,但里面的PostgreSQL是编译安装/usr/local/目录下的;而Alpine官方的postgresql-plpython3包,会把扩展文件放在系统默认的PostgreSQL路径:

  • 扩展控制文件:/usr/share/postgresql/extension/plpython3u.*
  • 动态库文件:/usr/lib/postgresql/plpython3.so

但PostgreSQL启动后只会去自己的安装目录下检索扩展资源,也就是/usr/local/share/postgresql/extension//usr/local/lib/postgresql/,自然就找不到Alpine包安装的文件了。

解决方案

修改你的Dockerfile,把Alpine包安装的扩展文件复制到PostgreSQL对应的搜索路径里,完整的Dockerfile如下:

FROM timescale/timescaledb:0.9.0-pg10
RUN set -ex \
    # 从edge testing仓库安装plpython3扩展包
    && apk add --no-cache --repository http://nl.alpinelinux.org/alpine/edge/testing \
        postgresql-plpython3 \
    # 复制扩展控制文件到PostgreSQL的扩展目录
    && cp /usr/share/postgresql/extension/plpython3u.* /usr/local/share/postgresql/extension/ \
    # 复制扩展动态库到PostgreSQL的lib目录
    && cp /usr/lib/postgresql/plpython3.so /usr/local/lib/postgresql/

验证步骤

  1. 用修改后的Dockerfile构建镜像:
    docker build -t timescaledb-pg10-plpython .
    
  2. 启动测试容器:
    docker run -d --name test-db timescaledb-pg10-plpython
    
  3. 进入容器执行SQL命令:
    docker exec -it test-db psql -U postgres
    
  4. 尝试创建扩展:
    CREATE EXTENSION plpython3u;
    
    这时候就能成功执行了!

额外提示

如果后续遇到权限问题,可以检查复制后的文件权限,确保PostgreSQL进程能读取这些文件——不过一般cp命令会保留原文件的权限,所以大概率不会有问题。

内容的提问来源于stack exchange,提问作者Yannic Hamann

火山引擎 最新活动