Docker PostgreSQL 9.6 - установка расширения plpython3u (столкновение с расширением квантиля)

Я пытаюсь установить PostkreSQL докционированный сервис с plpython. Я могу создать изображение успешно, но когда я пришел, чтобы запустить контейнер, я получаю следующую ошибку:

ОШИБКА: не удалось открыть файл управления расширением "/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": Нет такого файла или каталог

мой макет каталога:

[email protected]:~/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

[[Edit]]

Это команды, которые я использую для сборки и запуска контейнера:

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

Как установить plpython в докционированную службу PostgreSQL?

Ответ 1

Я думаю, что ваша ошибка была из-за начального ошибочного CMD, который указывал на неправильное расположение PostgreSQL для этого изображения (9.5 против 9.6).

Однако, я думаю, что я заметил ошибку, почему SQL не импортируется.

По умолчанию ENTRYPOINT для этого изображения (https://github.com/docker-library/postgres/blob/bef8f02d1fe2bb4547280ba609f19abd20230180/9.6/docker-entrypoint.sh) отвечает за импорт из /docker-entrypoint-initdb.d/. Поскольку вы перезаписываете CMD и не равны просто postgresql, он пропускает эту часть.

По умолчанию ENTRYPOINT должен делать то, что вы хотите. Попробуйте удалить CMD.

Ответ 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.