Docker PostgreSQL 9.6-安装扩展plpython3u(与分位数扩展冲突)

Docker PostgreSQL 9.6-安装扩展plpython3u(与分位数扩展冲突),postgresql,docker,Postgresql,Docker,我正在尝试使用plpython安装PostgreSQL dockerised服务。我能够成功地构建映像,但当我运行容器时,出现以下错误: 错误:无法打开扩展名控制文件 “/usr/share/postgresql/9.5/extension/plpython3u.control”:没有这样的文件 或目录语句:创建扩展名“plpython3u”; psql:/docker entrypoint initdb.d/create_db.sql:7:错误:无法 打开扩展名控制文件 “/usr/share

我正在尝试使用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”:没有这样的文件 或目录

我的目录布局: Dockerfile 创建_db.sql [[编辑]]

以下是我用于构建和运行容器的命令:

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

如何在停靠的PostgreSQL服务中安装plpython?

我认为您的错误是因为初始错误的
CMD
,它指向此映像的PostgreSQL的错误位置(9.5 vs 9.6)

但是,我认为我已经发现了为什么不导入SQL的错误

此映像(at)的默认
入口点
负责从
/docker ENTRYPOINT initdb.d/
导入。由于您正在覆盖
CMD
,并且它不等同于
postgresql
,因此它将跳过此部分


默认的
ENTRYPOINT
应该执行您想要的操作。尝试删除您的
CMD

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

/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.

乍一看,它看起来像是一个版本混淆:
来自library/postgres:9.6
/usr/share/postgresql/9.5/
(注意9.5 9.6)@FrankSchmitt是的,我也注意到了这一点。但是修改路径似乎并没有起到什么作用,有一次我在Dockerfile中使用了PostgreSQL 9.5映像-错误在所有这些更改中都持续存在-所以我猜这一定是另一回事。@HomunculusReticulli你有没有找到解决方法?我想你可能是误解了这个问题。问题不在于SQL脚本没有被导入(它是)。这是因为它在通过
CREATE EXTENSION
语句(在导入的SQL文件中)创建/安装plpython语言时失败了。但是你能更新你的错误信息吗?就目前的情况来看,错误似乎是错误的版本文件夹目标。实际上,我将坚持我的原始答案。我自己也测试过,它确实有效。因此,我猜您的
docker run
命令正在覆盖某些内容(如用户)并导致错误。您能用您正在使用的
docker run
命令更新您的原始问题吗?似乎在我尝试预先发送一个简单的可复制案例时,我在
Dockerfile
create\u database.sql
脚本中遗漏了一些相关信息。问题在于,如果同时安装了
quantile
扩展,则尝试安装
plpython
会失败。我已经在我的问题中添加了相关细节。似乎在我尝试发送一个简单的可复制案例时,我在我的
Dockerfile
create\u database.sql
脚本中遗漏了一些相关信息。问题在于,如果同时安装了
quantile
扩展,则尝试安装
plpython
会失败。我已经澄清了我的问题。
# 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
/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.