我正在一个容器中安装plpython3u postgres扩展,在psql中,这个扩展存在,但也不存在,Postgresql 14

kxxlusnw  于 2023-01-02  发布在  PostgreSQL
关注(0)|答案(1)|浏览(174)

我正在尝试将云数据从Docker容器中传输到Postgres数据库。我使用docker-compose构建了该容器,其中包含以下Dockerfile片段:

FROM postgres:14
...
RUN apt-get update \
    && pip3 install awscli

RUN aws --version
RUN apt-get -y install postgresql-plpython3-14

# symlinks for extension
RUN 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
...

我接着说:

$ docker exec -it <container> psql -U postgres -W

下面是psql

postgres=# CREATE EXTENSION plpython3u;
ERROR:extension "plpython3u" already exists
postgres=# DROP EXTENSION plpython3u;
ERROR: extension "plpython3u" does not exist

很明显有些事情不对劲,但我不知道是什么。
我不得不重新构建容器来添加符号链接,我使用了docker-compose build --no-cache。我尝试搜索类似的问题,但我所找到的都是添加符号链接的建议,我已经这样做了。
谢谢。

lymnna71

lymnna711#

您在Dockerfile中执行了一些不必要的步骤;你不需要去摆弄这些符号链接,映像中的Postgres安装在/usr中,而不是/usr/local中。
如果我将Docker文件简化为:

FROM postgres:14

RUN apt-get update && \
    apt-get -y install \
        postgresql-plpython3-14

然后构建并运行映像,我看到:

$ docker run -d --rm -e POSTGRES_PASSWORD=secret --name pgtest pgtest
...
$ docker exec -it pgtest psql -U postgres
psql (14.6 (Debian 14.6-1.pgdg110+1))
Type "help" for help.

postgres=# create extension "plpython3u";
CREATE EXTENSION
postgres=# drop extension "plpython3u";
DROP EXTENSION

相关问题