【问题标题】:Docker PostgreSQL 9.6 - installing extension plpython3u (clashing with quantile extension)Docker PostgreSQL 9.6 - 安装扩展 plpython3u(与分位数扩展冲突)
【发布时间】:2017-09-30 15:25:34
【问题描述】:

我正在尝试使用 plpython 安装 PostgreSQL dockerised 服务。我能够成功构建映像,但是当我运行容器时,出现以下错误:

错误:无法打开扩展控制文件 “/usr/share/postgresql/9.5/extension/plpython3u.control”:没有这样的文件 或目录声明:创建扩展“plpython3u”; psql:/docker-entrypoint-initdb.d/create_db.sql:7: 错误: 不能 打开扩展控制文件 “/usr/share/postgresql/9.5/extension/plpython3u.control”:没有这样的文件 或目录

我的目录布局:

me@yourbox:~/Projects/experimental/docker/scratchdb$ tree
.
├── Dockerfile
└── sql
    ├── create_db.sql
    └── schemas
        └── DDL
            └── db_schema_foo.sql

Dockerfile

FROM library/postgres:9.6
FROM zitsen/postgres-pgxn

RUN apt-get update \
 && apt-get install -y --no-install-recommends \
    python3 postgresql-plpython3-9.6

RUN pgxn install quantile

COPY sql /docker-entrypoint-initdb.d/ 

# Add VOLUMEs to allow backup of config, logs and databases
VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]

# Set the default command to run when starting the container
# CMD ["/usr/lib/postgresql/9.6/bin/postgres", "-D", "/var/lib/postgresql/9.6/main", "-c", "config_file=/etc/postgresql/9.6/main/postgresql.conf"]

create_db.sql

# Uncomment line below for debugging purposes
set client_min_messages TO debug1;

CREATE EXTENSION "quantile"
CREATE EXTENSION "plpython3u";

-- Create myappuser
CREATE ROLE myappuser LOGIN ENCRYPTED PASSWORD 'passw0rd123' NOINHERIT;
CREATE DATABASE only_foo_and_horses WITH ENCODING 'UTF8' TEMPLATE template1;
-- \l+
GRANT ALL PRIVILEGES ON DATABASE only_foo_and_horses TO myappuser;

-- Import only_foo_and_horses DDL and initialise database data
\c only_foo_and_horses;
\i /docker-entrypoint-initdb.d/schemas/DDL/db_schema_foo.sql;



-- # enable python in database

[[编辑]]

这些是我用来构建和运行容器的命令:

docker build -t scratch:pg .
docker run -it -rm scratch:pg

如何在 dockerised PostgreSQL 服务中安装 plpython?

【问题讨论】:

  • 乍一看,它看起来像是一个版本混淆:FROM library/postgres:9.6 vs /usr/share/postgresql/9.5/(注意 9.5 9.6)
  • @FrankSchmitt 是的,我也注意到了。但是修改路径似乎并不能解决问题,并且有一次我在我的 Dockerfile 中使用了 PostgreSQL 9.5 映像 - 在所有这些更改中都存在错误 - 所以我猜它一定是不同的东西。
  • @HomunculusReticulli 你有没有找到解决办法?

标签: postgresql docker


【解决方案1】:

我认为您的错误是因为最初的错误 CMD 指向此图像的 PostgreSQL 位置错误(9.5 与 9.6)。

但是,我想我已经发现了为什么没有导入 SQL 的错误。

此图像的默认ENTRYPOINThttps://github.com/docker-library/postgres/blob/bef8f02d1fe2bb4547280ba609f19abd20230180/9.6/docker-entrypoint.sh)负责从/docker-entrypoint-initdb.d/ 导入。由于您正在覆盖CMD,并且它不等于postgresql,因此它正在跳过这部分。

默认的ENTRYPOINT 应该做你想做的事。尝试删除您的CMD

【讨论】:

  • 我认为您可能误解了这个问题。问题不在于没有导入 SQL 脚本(它是)。是通过CREATE EXTENSION语句(在导入的SQL文件中)创建/安装plpython语言时失败。
  • 是的,我明白了。但是你能更新你的错误信息吗?就目前而言,看起来错误是错误的版本文件夹目标。
  • 其实,我会坚持我原来的答案。我自己对此进行了测试,并且确实有效。所以,我的猜测是你的docker run 命令正在覆盖某些东西(比如用户)并导致错误。您能否使用您正在使用的docker run 命令更新您的原始问题?
  • 似乎在我试图呈现一个简单的可复制案例时,我在Dockerfilecreate_database.sql 脚本中遗漏了一些相关信息。问题是在同时安装quantile 扩展时,尝试安装plpython 会失败。我已在我的问题中添加了相关详细信息。
【解决方案2】:

我刚刚从头开始运行这一切,似乎扩展已成功创建。还有问题吗?

/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/create_db.sql
SET
CREATE EXTENSION
CREATE ROLE
CREATE DATABASE
GRANT


LOG:  received fast shutdown request
waiting for server to shut down...LOG:  aborting any active transactions
LOG:  autovacuum launcher shutting down
LOG:  shutting down
.LOG:  database system is shut down
 done
server stopped

PostgreSQL init process complete; ready for start up.

【讨论】:

  • 似乎在我试图呈现一个简单的可复制案例时,我在Dockerfilecreate_database.sql 脚本中遗漏了一些相关信息。问题是在同时安装quantile 扩展时尝试安装plpython 会失败。我已经澄清了我的问题。
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2021-06-20
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
相关资源
最近更新 更多