Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker PostgreSQL 9.6 - installing extension plpython3u (clashing with quantile extension)

I am trying to install a PostgreSQL dockerised service, with plpython. I am able to build the image successfully, but when I come to run the container, I get the following error:

ERROR: could not open extension control file "/usr/share/postgresql/9.5/extension/plpython3u.control": No such file or directory STATEMENT: CREATE EXTENSION "plpython3u"; psql:/docker-entrypoint-initdb.d/create_db.sql:7: ERROR: could not open extension control file "/usr/share/postgresql/9.5/extension/plpython3u.control": No such file or directory

my directory layout:

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

[[Edit]]

These are the commands I use to build and run the container:

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

How do I install plpython in a dockerised PostgreSQL service?

like image 764
Homunculus Reticulli Avatar asked Sep 30 '17 15:09

Homunculus Reticulli


1 Answers

I think your error was because of the initial erroneous CMD which pointed to the wrong location of PostgreSQL for this image (9.5 vs 9.6).

However, I think I've spotted the mistake for why the SQL isn't being imported.

The default ENTRYPOINT for this image (at https://github.com/docker-library/postgres/blob/bef8f02d1fe2bb4547280ba609f19abd20230180/9.6/docker-entrypoint.sh) is responsible for importing from /docker-entrypoint-initdb.d/. Since you are overwriting CMD and it is not equal to just postgresql, it is skipping this part.

The default ENTRYPOINT should do what you want. Try removing your CMD.

like image 55
Andy Shinn Avatar answered Sep 28 '22 02:09

Andy Shinn